Python 从PyAudio str到AudioSegment的类型转换返回错误
我正致力于创建一个嵌入式压缩系统,类似于专业混音器上的压缩系统。我正在使用Python 从PyAudio str到AudioSegment的类型转换返回错误,python,audio-recording,pyaudio,pydub,Python,Audio Recording,Pyaudio,Pydub,我正致力于创建一个嵌入式压缩系统,类似于专业混音器上的压缩系统。我正在使用PyAudiovia捕获音频样本 会发生什么 由于库的作用,这些样本被分割成“块”,并在录制后不久流式传输。如果传入信号变得太大,我只是尝试压缩块。但是,存在不匹配的类型 正在使用的类型有: 数据=流中的样本-Unicode字符串 chunk=音频字节批-始终返回1024 stream.write(数据,块) 压缩的\u段=要压缩的 发生了什么事 PyAudio以字符串的形式从存储在数据中的stream.read()方
PyAudio
via捕获音频样本
会发生什么
由于库的作用,这些样本被分割成“块”,并在录制后不久流式传输。如果传入信号变得太大,我只是尝试压缩块。但是,存在不匹配的类型
正在使用的类型有:
- 数据=流中的样本
-Unicode字符串 - chunk=音频字节批
-始终返回1024 - stream.write(数据,块)
- 压缩的\u段=要压缩的
字符串的形式从存储在数据中的stream.read()
方法返回。我需要能够将这些字符串样本转换为AudioSegment对象,以便使用压缩功能
结果,最终发生的是,我得到了几个与类型转换相关的错误,这取决于我如何设置所有内容。我知道这不是合适的类型。那么我怎样才能使这种类型转换工作呢
以下是我尝试在范围内对I进行转换的两种方法
循环
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
异常波。错误:忽略中的错误(“#未指定通道”)
2.将原始音频数据发送到压缩方法
data = stream.read(chunk)
compress(chunk) # Calling compress_dynamic_range in Pydub
阈值均方根=分段最大可能振幅*db到浮点(阈值)
AttributeError:“int”对象没有“最大可能振幅”属性
在设置通道
之前写入wave文件而引发的第一个错误可以按如下方式修复:
# inside for i in range loop
wave_file = wave.open(f="compress.wav(%s)" %i, mode="wb")
wave_file.setnchannels(channels)
wave_file.setsampwidth(sample_width)
wave_file.setframerate(sample_rate)
wave_file.writeframesraw(data) # place this after all attributes are set
wave_file.close()
# send temp files to compressor
compressed = AudioSegment.from_raw(wave_file)
compress(compressed)
然后可以将其发送到PyDub函数compress\u dynamic\u range
然而。。。
一种更有效的方法是用以下方法创建一个简单的AudioSegment对象,这种方法不需要创建temp wav文件。还可以使用stream.write()
将压缩后的声音流回到PyAudio
sound = AudioSegment(data, sample_width=2, channels=2, frame_rate=44100)
stream.write(sound.raw_data, chunk) # stream via speakers / headphones