繁体   English   中英

用pygame.midi播放音符

[英]Playing note with pygame.midi

我正在尝试使用pygame.midi模块播放声音。 这是我使用的代码:

#!/usr/bin/env python

import pygame.midi
import time

pygame.midi.init()

print pygame.midi.get_default_output_id()
print pygame.midi.get_device_info(0)

player = pygame.midi.Output(0)

player.set_instrument(0)

print 'Playing...'

player.note_on(64)
time.sleep(1)
player.note_off(64)

print 'Played'

pygame.midi.quit()

我在搜索例子时发现了类似的代码,这里是输出:

0

('ALSA','Midi Through Port-0',0,1,0)

打...

玩过

PortMidi呼叫失败......

PortMidi:“糟糕的指针”

输入ENTER ...

没有播放声音,我没有找到任何有关Portgidi错误的信息,这个信息在pygame.midi退出后出乎意料地发生。

你有什么主意吗? 我正在运行基于debian的linux发行版,如果这可以帮助的话。

有两个小问题。 由于您未设置音符的速度 ,因此不会播放声音。 尝试将其设置为127(最大)以听到声音。 另一个问题是你在退出之前不要删除midi输出对象。 这导致最后出现“PortMidi:'Bad pointer'”错误。 所以这里是正确的代码应该正常工作:

import pygame.midi
import time

pygame.midi.init()
player = pygame.midi.Output(0)
player.set_instrument(0)
player.note_on(64, 127)
time.sleep(1)
player.note_off(64, 127)
del player
pygame.midi.quit()

感谢您的代码,帮助我开始使用midi和python。

在我看来,你忘记了note_on,note_off事件中的速度(音量类型)信息。 默认值为0,因此音符将“播放”,但不会发出声音。

关于你得到的退出错误消息...我无法帮助,我不知道Linux和ALSA。 作为参考,这在使用默认midi映射器的Win Vista盒子中对我来说很好。 这只是使用基调和大和弦结构来演奏音符,琶音或和弦。

import pygame
import time
import pygame.midi

pygame.midi.init()
player= pygame.midi.Output(0)
player.set_instrument(48,1)

major=[0,4,7,12]

def go(note):
    player.note_on(note, 127,1)
    time.sleep(1)
    player.note_off(note,127,1)

def arp(base,ints):
    for n in ints:
        go(base+n)

def chord(base, ints):
    player.note_on(base,127,1)
    player.note_on(base+ints[1],127,1)
    player.note_on(base+ints[2],127,1)
    player.note_on(base+ints[3],127,1)
    time.sleep(1)
    player.note_off(base,127,1)
    player.note_off(base+ints[1],127,1)
    player.note_off(base+ints[2],127,1)
    player.note_off(base+ints[3],127,1)
def end():
       pygame.quit()

要使用它,只需导入模块,例如,键入命令,如go(60),chord(60,major)或arp(60,major)

错误消息显示您的输出设备是“MIDI直通端口” - 它无法自行发出声音。 您必须连接它(例如使用qjackctl或任何其他工具让您连接ALSA MIDI端口)到qsynth等软件合成器。

尝试导入整个pygame模块:

import pygame

import pygame.midi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM