在Python或c++中播放mp3的单声道
Mono Playback of Mp3s in Python OR C++
我在python中使用pyqt编写一个音乐播放器,我希望它具有mp3文件的单声道播放功能。
我已经使用pygame完成了这一点,因为它的混音器有一个特定的参数channels
,我可以将其设置为1
以获得单声道播放。
然而,pygame mp3支持是有限的,所以我正在寻找一个库,将能够处理mp3文件和单声道播放。
目前,我正在使用pyaudiere进行播放,在它的网站上有一个在播放之前处理歌曲的例子,所以也许我可以这样做来把歌曲变成单声道,但我真的不知道如何完成。
我想帮助如何使用pyaudiere或任何其他可以处理mp3文件的库编写此功能。
编辑
我也会接受c++的解决方案,因为我总是可以使用Boost::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
.
希望有帮助!
- 如何使用 ALSA API 在应用程序中在单声道和立体声之间切换声音输出?
- 将具有嵌入式单声道的 C++ 函数指针传递给 C#
- 单声道嵌入在 qt 5.3 应用程序中
- 单声道C#/C 互动,优化矩阵乘法 - 开销引起的最小增益
- 如何使用单声道嵌入将字符串参数传递给 c# 方法
- 在C 中使用单声道获得汇编类
- 使用 C++ 和嵌入式单声道调用 C# DLL 时无法加载程序集系统
- 对于C 和单声道的轻质RUDP网络库的合适选择是什么?
- C# 与单声道还是C++?(运行 Ubuntu)
- C++使用单声道嵌入式 (C#),发送指针
- 在单声道项目和 C++ 控制台应用之间传输数据
- 单声道嵌入:如何在 C/C++ 中访问属性的类型
- 将单声道编译为静态库
- 在单声道中播放单声道波形文件
- XCode中的单声道链接
- 如何通过编程将44100立体声转换为11025单声道
- 嵌入式单声道:如何在C++中引发事件
- 立体声音频比单声道短两倍
- 在Python或c++中播放mp3的单声道
- Gstreamer选择一个通道并转换为单声道(去交错)