В настоящее время у меня есть 2-канальный файл wav. Я хотел бы иметь возможность воспроизводить один канал за раз. Используя примеры с веб-сайта PyAudio, где вы читаете блок данных через волновой модуль, а затем записываете в поток, я не уверен, нужно ли мне как-то читать в одном канале данных и записывать в поток одного канала, или если есть какое-то другое решение. Спасибо за помощь.
Воспроизведение одного канала звука с помощью PyAudio или аналогичного
Ответы (1)
Я предлагаю вам изменить поток и перезаписать канал, который вы не хотите слушать, данными из канала, который вы хотите слушать. Обычно каналы чередуются, поэтому следующее должно помочь.
import pyaudio
import wave
import sys
chunk = 1024
def convert(data, sampleSize = 4, channel = 0):
for i in range(0, len(data), 2*sampleSize):
for j in range(0, sampleSize):
data[i + j + sampleSize * channel] = data[i + j + sampleSize * (1 - channel)]
if len(sys.argv) < 2:
print "Plays a wave file.\n\n" +\
"Usage: %s filename.wav" % sys.argv[0]
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
p = pyaudio.PyAudio()
# open stream
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)
convert(data)
# play stream
while data != '':
stream.write(data)
data = wf.readframes(chunk)
convert(data)
stream.close()
p.terminate()
person
user1202136
schedule
22.08.2012