Pydub原始音频数据

时间:2015-09-03 11:10:45

标签: python pydub pitch-detection

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

我有一个工作间距检测算法(McLeod Pitch Method),它对于实时应用非常强大(我甚至用它制作了一个Android音高检测应用程序:https://github.com/sevagh/Pitcha)。

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

代码:

<html>
<head>
    <link rel="stylesheet" href="css/combined.css"/>
</head>
<body>
    <script src="scripts/combined.js"></script>
</body>
</html>

输出:

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))

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

AudioSegment._data不会返回我期待的内容吗?

1 个答案:

答案 0 :(得分:3)

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)