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

Packing generated audio data from float to str

任务是生成音频数据,让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. 这是如何做这样的事情的好例子: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.