私はPython sounddeviceとPySoundFileを使用して、音声を "邪魔しない"、つまりノンブロッキングコールバックを使用しています。 (https://stackoverflow.com/users/500098/matthiasの帽子の先端とクルー - これらのパッケージは使いやすく、必要なものすべてをやります。)注意:sd.play()を使用する方がはるかに簡単ですが、私はこのパックを選択しました。コールバックメソッド内で追加処理を行うことができます。コールバック内からPythonサウンドデバイスを正常に停止する方法
私はサウンドファイルの終わりに達したときを検出できますが、最後にキューに入れられたバッファを再生した後にサウンドデバイスが停止するように指示する方法は明確ではありません。
ここでは、機能しないコールバックの例を示します。サウンドファイル全体を再生しますが、最後のバッファを処理した後は停止しません。コールバックでは、私はsd.CallbackStop()
を上げますが、ストリームの状態はstopped
なりません:
def callback(outdata, frame_count, time, status):
view = sf.read(frame_count, dtype='float32', out=outdata)
if (view.size != outdata.size): # this was the last buffer.
print('stopping')
sd.CallbackStop()
with sd.OutpuStream(samplerate=sf.samplerate,
channels=sf.channels,
dtype=np.float32,
callback=callback) as ss:
while (ss.active):
time.sleep(0.1)
[sd.play()](http://python-sounddevice.readthedocs.io/en/latest/#sounddevice.play)を使用して*もっと簡単な方法が追加されているはずです。 – Matthias
完了。私は彼らが行くようにビットを触れることができるようにしたいことを明確にした。 –