11

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... と入力します。

サウンドは再生されず、pygame.midi が終了した後に驚くほど発生する PortMidi エラーに関する情報は見つかりませんでした。

何か考えはありますか?それが役立つ場合は、debian ベースの Linux ディストリビューションを実行しています。

4

4 に答える 4

12

小さな問題が 2 つあります。ノートのベロシティを設定していないため、サウンドは再生されません。音を聞くには、127 (最大) に設定してみてください。もう 1 つの問題は、終了する前に最後に 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()
于 2014-07-31T18:44:10.803 に答える
4

このエラー メッセージは、出力デバイスが「MIDI スルー ポート」であることを示しています。これは、それ自体では音を出すことができません。qsynth などのソフトウェア シンセサイザーに接続する必要があります (たとえば、qjackctl または ALSA MIDI ポートを接続できるその他のツールを使用)。

于 2015-08-06T12:26:09.397 に答える