Python Language
パイオディオ
サーチ…
前書き
PyAudioは、クロスプラットフォームのオーディオI / OライブラリであるPortAudioのPythonバインディングを提供します。 PyAudioを使用すると、Pythonを使用してさまざまなプラットフォームでオーディオを簡単に再生して録音できます。 PyAudioは、
1.pyPortAudio / fastaudio:PortAudio v18 API用のPythonバインディング。
2.tkSnack:Tcl / TkとPython用のクロスプラットフォームサウンドツールキット。
備考
注意: stream_callbackは別のスレッド(メインスレッドから)で呼び出されます。 stream_callbackで発生する例外は次のようになります。
1は 、デバッグを支援するために、標準エラーにトレースバックをの.print
2。 (ある時点で)メインスレッドにスローされる例外をキューに入れます。
ストリームを停止するPortAudioに3 .return paAbort。
注:非ブロック操作を使用している場合は、Stream.read()またはStream.write()をコールしないでください。
参照:PortAudioのコールバック署名:
http://portaudio.com/docs/v19-doxydocs/portaudio_8h.html#a8a60fb2a5ec9cbade3f54a9c978e2710
コールバックモードオーディオI / O
"""PyAudio Example: Play a wave file (callback version)."""
import pyaudio
import wave
import time
import sys
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# define callback (2)
def callback(in_data, frame_count, time_info, status):
data = wf.readframes(frame_count)
return (data, pyaudio.paContinue)
# open stream using callback (3)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True,
stream_callback=callback)
# start the stream (4)
stream.start_stream()
# wait for stream to finish (5)
while stream.is_active():
time.sleep(0.1)
# stop stream (6)
stream.stop_stream()
stream.close()
wf.close()
# close PyAudio (7)
p.terminate()
コールバックモードでは、新しいオーディオデータが必要なとき(再生するとき)、新しい(録音された)オーディオデータがあるときはいつでも、PyAudioは指定のコールバック関数(2)を呼び出します。 PyAudioは別のスレッドでコールバック関数を呼び出します。この関数は、次のシグネチャcallback(<input_data>, <frame_count>, <time_info>, <status_flag>)
をframe_count
フレームのオーディオデータと再生/記録するフレームがあるかどうかを示すフラグを含むタプルを返す必要があります。
pyaudio.Stream.start_stream() (4)を使用してオーディオストリームの処理を開始します。これは、関数がpyaudio.paCompleteを返すまでコールバック関数を繰り返し呼び出します。
ストリームをアクティブに保つために、メインスレッドはsleep(5)などで終了してはいけません。
ブロッキングモードオーディオI / O
"" "PyAudioの例:waveファイルを再生します。"
import pyaudio
import wave
import sys
CHUNK = 1024
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# read data
data = wf.readframes(CHUNK)
# play stream (3)
while len(data) > 0:
stream.write(data)
data = wf.readframes(CHUNK)
# stop stream (4)
stream.stop_stream()
stream.close()
# close PyAudio (5)
p.terminate()
PyAudioを使用するには、最初にpyaudio.PyAudio() (1)を使用してPyAudioをインスタンシエートします。これは、portaudioシステムを設定します。
オーディオを録音または再生するには、 pyaudio.PyAudio.open() (2)を使用して、目的のオーディオパラメータでストリームを開きます。これは、 オーディオを再生または録音するpyaudio.Streamを設定します。
pyaudio.Stream.write()を使用してオーディオデータをストリームに書き込むか、 pyaudio.Stream.read()を使用してストリームからオーディオデータを読み込んでオーディオを再生します。 (3)
「 ブロッキングモード 」では、各pyaudio.Stream.write()またはpyaudio.Stream.read()は、指定/要求されたすべてのフレームが再生/記録されるまでブロックします。また、オンザフライでオーディオデータを生成したり、録音したオーディオデータを直ちに処理したりするには、「コールバックモード」(コールバックモードの例を参照 )
再生/録音を一時停止するにはpyaudio.Stream.stop_stream()を使用し、ストリームを終了するにはpyaudio.Stream.close()を使用します。 (4)
最後に、 pyaudio.PyAudio.terminate() (5)を使用してportaudioセッションを終了します。