私はしばらくpyaudioをいじくり回してきましたが、単純なwaveファイルを元に戻そうとしましたが、成功しませんでした。
(私の)理論では、pyaudio(1024フレーム)のコールバックごとにファイルを最初から最後まで反復するだけで済み、ファイル内の対応するインデックスからオーディオデータを取得し、結果の文字列を逆にして再生します。
これが私のコードです(pyaudioコールバックとファイル処理のみ、残りはサンプルコードから変更されていません):
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)
index = 40*1024
wf = wave.open(sys.argv[1], 'rb')
wf.setpos(index)
p = pyaudio.PyAudio()
def callback(in_data, frame_count, time_info, status):
global index
data = wf.readframes(frame_count)
data = data[::-1]
index-=1024
wf.setpos(index)
return (data, pyaudio.paContinue)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True,
stream_callback=callback)
stream.start_stream()
while stream.is_active():
time.sleep(0.1)
stream.stop_stream()
stream.close()
wf.close()
p.terminate()
ファイルの先頭に到達するとクラッシュすることはわかっていますが、40 × 1024 フレームの反転オーディオを再生する必要があります...