在Python或c++中播放mp3的单声道

Mono Playback of Mp3s in Python OR C++

本文关键字:单声道 声道 mp3 Python c++ 播放      更新时间:2023-10-16

我在python中使用pyqt编写一个音乐播放器,我希望它具有mp3文件的单声道播放功能。

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

然而,pygame mp3支持是有限的,所以我正在寻找一个库,将能够处理mp3文件和单声道播放。

目前,我正在使用pyaudiere进行播放,在它的网站上有一个在播放之前处理歌曲的例子,所以也许我可以这样做来把歌曲变成单声道,但我真的不知道如何完成。

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

编辑

我也会接受c++的解决方案,因为我总是可以使用Boost::python

构建python包装器。

如果你想要真正好的Windows支持,我怀疑你可能需要或发现使用不同的Windows API更容易…查看这些链接:

  • http://people.csail.mit.edu/hubert/pyaudio/(跨平台)
  • http://ffmpeg.org/ffmpeg.html(跨平台)
  • http://www.codeproject.com/KB/audio-video/MP3Example.aspx (windows)
  • http://msdn.microsoft.com/en-us/library/windows/desktop/dd743572%28v=vs.85%29.aspx (windows)

编辑-最有可能的解决方案(到目前为止,评论是相当积极的):

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

你考虑过Python音频工具吗?它具有加载MP3并使用Player类播放的能力。Player类初始化器接受一个AudioOutput对象,它允许您指定播放通道的数量。

这个项目在2011年10月30日的最后一次git提交(就在你发帖前不到两周)似乎得到了很好的支持。它也已经存在一段时间了,所以它看起来并不是一个不可靠的库。

Gstreamer的Python绑定。

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

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等

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

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

每个样本i .

希望有帮助!