轻松播放 24 位 .wav 音频文件
Posted
技术标签:
【中文标题】轻松播放 24 位 .wav 音频文件【英文标题】:Easily play 24 bits .wav audio files 【发布时间】:2014-05-23 14:18:54 【问题描述】:众所周知,Windows API PlaySound()
不允许播放 24 位 .wav 文件。
在 Windows 平台上以 C/C++ 播放 24 位 .wav 文件的最短方法是什么?
(如果可能,不需要第三方库)
【问题讨论】:
我会建议mciSendString
,但这篇帖子***.com/questions/6032795/… 似乎表明这也可能存在问题。您是否看过使用 DirectShow:***.com/a/8121768/2718186?
感谢@MicroVirus。您能否提供一个小代码示例,以便我可以尝试使用 mciSendString
? (我用的是 Win7,所以我不介意它不能在 WinXP 上工作)。
【参考方案1】:
你也许可以使用mciSendString
,但我不确定它是否可以播放 24 位 WAV 文件,是否可以播放平台要求。
MCI 使用 mciSendString
发送的简单字符串命令。打开一个文件并播放它(为简洁起见省略了错误检查):
mciSendString("open \"C:\\My Folder\\Sample.wav\" type waveaudio alias sampleSound", NULL, 0, NULL);
mciSendString("play sampleSound from 0", NULL, 0, NULL);
请注意,alias sampleSound
是您为打开的资源指定的自定义名称,因此您可以稍后参考。您可以使用字符串"close sampleSound"
关闭资源,还有更多的命令和选项可以控制播放。
如果这不起作用,那么最好的办法是使用 DirectShow,它可以利用系统上安装的所有 DirectShow 过滤器进行播放。这个 SO answer Use Windows built in MP3 decoder to play audio? 给出了示例代码。
【讨论】:
【参考方案2】:仅供参考,我还将 MicroVirus 的答案改写成 Python 代码:
import ctypes
ctypes.windll.WINMM.mciSendStringW(u"open BASS.wav type waveaudio alias sample1", None, 0, None)
ctypes.windll.WINMM.mciSendStringW(u"play sample1 from 0", None, 0, None)
raw_input()
适用于 24 位 .wav 文件!
【讨论】:
以上是关于轻松播放 24 位 .wav 音频文件的主要内容,如果未能解决你的问题,请参考以下文章