音乐分析与可视化

时间:2011-06-15 11:05:33

标签: python audio visualization

我对用Python编写音乐可视化器感兴趣。

第一个问题是如何从音乐中获取信息?像音量,频率,转速等 从哪里来?从声卡或实际的音乐文件?

我的猜测来自声卡,但我如何访问声卡和所需信息?最好是以平台独立的方式(Linux是必须的)。 我已经读过一些有关傅立叶变换的内容,但我不确定这是否是最好的方法。

我考虑过使用OpenGL进行可视化,但我仍然愿意接受建议。

我已经查看了那些wikipages,但还没有找到答案: http://wiki.python.org/moin/Audio/
http://wiki.python.org/moin/PythonInMusic

3 个答案:

答案 0 :(得分:14)

如果您正在寻找一个跨平台的音频库,我强烈建议您使用FMOD。还有一个wrapper可以在python中使用它(虽然我从未使用它) 它将提供诸如开箱即用的频谱等功能 如果您想分析音频文件,我的算法deix beat spectrum。它通过将音乐的每个短样本与每个其他短样本进行比较来计算相似度矩阵。一旦计算出相似度矩阵,就可以得到每个时间间隔T的每个样本对{S(T); S(T + 1)}之间的平均相似度:这是拍频谱。
它允许获取音频序列的BPM,但可以更像识别音乐的不同部分,定位类似样本之间的过渡。我不知道你的意思是“视觉化音频”,但我认为这个算法应该为你提供足够的信息来开始将图像同步到音频(如果你想做的话)。

答案 1 :(得分:6)

另一个工具是librosa。除默认操作外,它还提供Beat tracking来获取bpm。根据教程,节拍跟踪:

import librosa
audio_path = librosa.util.example_audio_file()
# or uncomment the line below and point it at your favorite song:
# audio_path = '/path/to/your/favorite/song.mp3'
y, sr = librosa.load(audio_path)
y_percussive = librosa.effects.hpss(y)
tempo, beats = librosa.beat.beat_track(y=y_percussive, sr=sr)

作为@dionyziz also said

  节拍将在帧中。您可以使用

将它们转换为实际时间
librosa.frames_to_time(beats)

我没试过。

答案 2 :(得分:2)

由于Echo Nest API不再可用,因此不再是一个好的答案 仅出于历史原因

考虑Echo Nest API,它与Python完美配合,并将返回有关每分钟节拍(可能是您想要的而不是RPM),平均幅度,甚至是任何音频文件的“危险性”的信息。你需要一个API密钥,但除此之外它是免费的并且效果很好。

它还有通过Echo Nest Remix软件包操作音乐的代码。这是他们的示例代码:

"""Reverse a song by playing its beats 
   forward starting from the end of the song"""
import echonest.audio as audio   

# Easy around wrapper mp3 decoding and Echo Nest analysis
audio_file = audio.LocalAudioFile("NeverGonnaTellIt.mp3")

# You can manipulate the beats in a song as a native python list
beats = audio_file.analysis.beats
beats.reverse()


# And render the list as a new audio file!
audio.getpieces(audio_file, beats).encode("NeverGonnaTellItBackwardsByBeat.mp3")