将生成的音频数据从float包装到str

时间:2015-02-27 09:23:45

标签: python pyaudio

任务是生成音频数据并让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))) 

但它不起作用,它只会起到噪音作用。我在某处弄错了。

1 个答案:

答案 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。