我正在创建一个嵌入式压缩系统,类似于专业音频混音器上的那些。我正在PyAudio
通过给定的“wire”示例捕获音频样本。
会发生什么
由于库,这些样本被分成“块”,并在录制后不久进行流式传输。如果输入信号变得太大,我只是尝试压缩块。但是,存在不匹配的类型。
正在使用的类型是:
- 数据 = 流中的样本
<type 'str'>
- Unicode 字符串 - chunk = 一批音频字节
<type 'int'>
-总是返回 1024 - stream.write(数据,块)
<type 'NoneType'>
- compressed_segment = 被压缩
<class 'pydub.audio_segment.AudioSegment'>
发生了什么
PyAudiostring
从stream.read()
存储在data
. 我需要能够将这些字符串样本转换为 AudioSegment 对象才能使用压缩功能。
结果,最终发生的事情是我收到了几个与类型转换相关的错误,这取决于我如何设置所有内容。我知道这不是正确的类型。那么我怎样才能使这种类型转换工作呢?
这是我尝试在for i in range
循环中进行转换的两种方法
1.在压缩前创建一个“波浪”对象
wave_file = wave.open(f="compress.wav", mode="wb")
wave_file.writeframes(data)
frame_rate = wave_file.getframerate()
wave_file.setnchannels(2)
# Create the proper file
compressed = AudioSegment.from_raw(wave_file)
compress(compressed) # Calling compress_dynamic_range in Pydub
异常 wave.Error: Error('# channels not specified',) in <bound method Wave_write. <wave.Wave_write instance at 0x000000000612FE88>> 的del被忽略
2.发送RAW PyAudio数据压缩方法
data = stream.read(chunk)
compress(chunk) # Calling compress_dynamic_range in Pydub
thresh_rms = seg.max_possible_amplitude * db_to_float(threshold) AttributeError: 'int' object has no attribute 'max_possible_amplitude'