Pydub原始音频数据



我在Python 3.4中使用Pydub来尝试检测一些音频文件的音高。

我有一个工作的音调检测算法(McLeod音调方法),这是实时应用程序的鲁棒性(我甚至用它制作了一个Android音调检测应用程序:https://github.com/sevagh/Pitcha)。

我的问题是,当我把它应用到AudioSegment._data时,我没有从算法中得到任何有意义的输出。

代码:

from pydub import AudioSegment
sound = AudioSegment.from_wav(file="./8700hz.wav")
#sampling rate = sound.frame_rate = 44100hz
mpm = Mpm(sound.frame_rate, len(sound._data))
print(mpm.get_pitch(sound._data))
输出:

Pitch: 150.000002396

如果我从我的扬声器播放相同的wav文件,从我的麦克风记录它,并将算法应用于原始麦克风捕获(签名16位小端位PCM, 44100Hz,单声道),我得到正确的音高。

AudioSegment。_data不返回我所期望的?

sound._databytestring。我不确定Mpm期望的输入,但您可能需要将bytestring转换为array,如下所示:

import array
from pydub import AudioSegment
from pydub.utils import get_array_type
sound = AudioSegment.from_wav(file="./8700hz.wav")
bit_depth = sound.sample_width * 8
array_type = get_array_type(bit_depth)
numeric_array = array.array(array_type, sound._data)

相关内容

  • 没有找到相关文章

最新更新