【问题标题】:Easily play 24 bits .wav audio files轻松播放 24 位 .wav 音频文件
【发布时间】:2014-05-23 14:18:54
【问题描述】:

众所周知,Windows API PlaySound() 不允许播放 24 位 .wav 文件。

在 Windows 平台上以 C/C++ 播放 24 位 .wav 文件的最短方法是什么?

(如果可能,不需要第三方库)

【问题讨论】:

  • 我会建议mciSendString,但这篇帖子stackoverflow.com/questions/6032795/… 似乎表明这也可能存在问题。您是否看过使用 DirectShow:stackoverflow.com/a/8121768/2718186?
  • 感谢@MicroVirus。您能否提供一个小代码示例,以便我可以尝试使用 mciSendString ? (我用的是 Win7,所以我不介意它不能在 WinXP 上工作)。

标签: c winapi audio directsound


【解决方案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 文件!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多