我一直在修补pyaudio一段时间,试图反转一个简单的波形文件,但没有成功。
在(我的)理论中,我只需要从头到尾遍历文件,每次调用 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 帧的反转音频......