Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从PyAudio str到AudioSegment的类型转换返回错误_Python_Audio Recording_Pyaudio_Pydub - Fatal编程技术网

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段=要压缩的
发生了什么事 PyAudio以
字符串的形式从存储在
数据中的
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