在Python或C ++中单声道播放Mp3s

时间:2011-11-09 12:06:48

标签: c++ python audio mp3

我使用pyqt在python中编码music player,我希望它能够播放mp3文件的单声道。

我已经完成了使用pygame,因为它的调音台有一个特定的参数channels,我可以将其设置为1以获得单声道播放。

然而,pygame mp3 support is limited,所以我正在寻找一个能够处理mp3文件和单声道播放的库。

目前,我正在使用pyaudiere进行播放,并且在其site上有一个在播放之前处理歌曲的示例,所以也许我可以将歌曲转换为单声道,但我真的不知道如何做到这一点。

我想了解如何使用pyaudiere或任何其他可以处理mp3文件的库来编写此功能。

修改

我也接受C ++中的解决方案,因为我总是可以使用Boost :: python构建一个python包装器

4 个答案:

答案 0 :(得分:4)

如果你想获得非常好的Windows支持,我怀疑你可能需要或者更容易使用不同的Windows for Windows ...请查看以下链接:

编辑 - 很可能是解决方案(到目前为止评论非常积极):

另一个选项是http://www.un4seen.com/bass.html(小心:商业) - 它可以满足您的所有要求,可以在非商业应用程序中免费使用,并且有一个python包装器(称为pybass)......

答案 1 :(得分:1)

您考虑过Python Audio Tools了吗?它能够加载MP3并使用Player类播放它。 Player类初始值设定项接受AudioOutput对象,可让您指定播放频道的数量。

该项目似乎得到了2011年10月30日最后git commit的支持(在您发布前不到两周)。它也存在了一段时间,所以它似乎不是一个夜间图书馆。

答案 2 :(得分:1)

Gstreamer's Python bindings

这是一个非常简单的音乐播放器:

import gobject
import gst
pipeline = gst.parse_launch('filesrc location="stereo.mp3" ! mad ! audioconvert ! audio/x-raw-int,channels=1 ! autoaudiosink')
pipeline.set_state(gst.STATE_PLAYING)

gobject.threads_init()
gobject.MainLoop().run()

我真的建议你研究Gstreamer,因为它已经成为大多数开源平台的事实上的多媒体解决方案,并支持各种各样的音频文件。使用它的示例应用程序:Rhythmbox,Banshee,Totem等......

答案 3 :(得分:0)

虽然这还不是一个完整的答案,但要将多声道音频wav文件转换为单声道文件,您只需获得所有频道的平均值即可。 在立体声的情况下,您将拥有:

mono[i]=(left[i]+right[i])/2

每个样本i

希望它有所帮助!