任务是生成音频数据并让pyaudio
播放它们。步骤:
1.生成声音数据
2.将它们转换为字符串,以便
3. pyaudio stream
可以播放它们
第一名很清楚,所有人都可以使用例如这段代码:
for x in xrange(NUMBEROFFRAMES):
WAVEDATA = WAVEDATA+chr(int(math.sin(2*x/((BITRATE/FREQUENCY)/math.pi))*127+128))
p = PyAudio()
stream = p.open(format = p.get_format_from_width(1),
channels = 1,
rate = BITRATE,
output = True)
stream.write(WAVEDATA)
但我希望范围比0 ... 255更宽,这是chr
的限制
点。
任何聪明的想法?
我试过了:
WAVEDATA = WAVEDATA+struct.pack('f',math.sin(2*x/((BITRATE/FREQUENCY)/math.pi)))
但它不起作用,它只会起到噪音作用。我在某处弄错了。
答案 0 :(得分:0)
好的,实际上它非常简单(几乎是愚蠢的)。我找到了两个选择:
1.以下是如何做到这一点的好例子:http://milkandtang.com/blog/2013/02/16/making-noise-in-python/
2.或者只是这样做(定义了NUMBEROFFRAMES,BITRATE和FREQUENCY):
import math
import pyaudio
import struct
for x in xrange(NUMBEROFFRAMES):
WAVEDATA = WAVEDATA+struct.pack('f',(math.sin(2*x/((BITRATE/FREQUENCY)/math.pi)))
p = PyAudio()
stream = p.open(format = p.get_format_from_width(4),
channels = 1,
rate = BITRATE,
output = True)
stream.write(WAVEDATA)
我的愚蠢错误是当我使用花车时,我在get_format_from_width
中留下了1。它应该是4。