使用PyAudio生成音调时为何会有点击声?
标题已经说明了问题是什么。我不知道该怎么解决这个问题。每次播放音调之间都会有咔嗒声。有些人听起来像是“啪”的一声。
import math
import pyaudio
import sys
PyAudio = pyaudio.PyAudio
def playTone(rate,wave,time,channel):
data = ''.join([chr(int(math.sin(x/((rate/wave)/math.pi))*127+128)) for x in xrange(rate)])
p = PyAudio()
stream = p.open(format =
p.get_format_from_width(1),
channels = channel,
rate = rate,
output = True)
for DISCARD in xrange(int(time)):
stream.write(data)
#stream.stop_stream()
#stream.close()
#p.terminate()
'''
playTone(88000,400,1,2)
playTone(88000,500,1,1)
playTone(88000,600,1,2)
playTone(88000,700,1,2)
'''
def scale(noteNumber):
counter = 100
while noteNumber*100 > counter:
playTone(88000,100+counter,1,2)
counter += 100
scale(10)
1 个回答
2
在构建 data = ''.join([...
和播放 stream.write(data)
之间,有一个时间间隔。
这个间隔会发出“咔嗒”的声音。
要找出原因,可以尝试把 data
输出出来,然后以 88000Hz、8位和2声道的原始数据格式播放。
一个简单的解决办法是,在播放之前先生成好所有的信号。
或者,可以使用不同的线程来同时生成和播放声音。