返回

如何在 Windows 中指定 Playsound 扬声器输出?

windows

如何精确控制 Playsound 输出设备

问题概述

当你使用 Playsound() 函数播放音频文件时,你可能会遇到音频并非从扬声器播放,而是从默认输出设备(通常是耳机)播放的问题。虽然 Windows 中的声音设置允许你将音频输出设备设置为扬声器,但该设置仅适用于大多数应用程序,Playsound() 除外。为了解决这个问题,我们需要一种方法来使用 Playsound() 将音频特定地播放到连接的扬声器。

解决方案:Windows API

答案在于使用 Windows API 函数 waveOutSetVolume()。此函数允许我们设置特定音频输出设备的音量,包括扬声器。通过使用此函数,我们可以将音频输出重定向到扬声器。

代码示例

以下是修改后的代码,演示了如何使用 waveOutSetVolume() 将音频输出重定向到扬声器:

void PlaySoundToSpeakers(const char* filename) {
    // ...(打开音频文件、加载音频文件和获取音频文件句柄的代码)

    // 设置扬声器的音量
    WAVEHDR waveHdr = {0};
    waveHdr.lpData = NULL;
    waveHdr.dwBufferLength = 0;
    MMRESULT result = waveOutSetVolume(hWaveOut, &waveHdr.dwVolume);

    // ...(继续播放音频文件的代码)
}

使用说明

  1. 将修改后的代码复制到你的项目中。
  2. 在 PlaySoundToSpeakers() 函数中,将 "filename" 参数替换为要播放的音频文件的路径。
  3. 编译并运行你的程序。

注意

  • waveOutSetVolume() 函数仅适用于 Windows 操作系统。
  • 此解决方案适用于大多数扬声器,但可能无法适用于所有类型的音频输出设备。

结论

通过使用 waveOutSetVolume() 函数,我们现在可以精确控制 Playsound() 的输出设备。这使得我们能够将音频定向到特定的扬声器或其他音频输出设备,从而获得所需的音频体验。

常见问题解答

  1. 我尝试了这个解决方案,但我的扬声器仍然没有声音。
    • 确保扬声器已正确连接到你的计算机,并且音量已调高。
  2. 此解决方案与哪些版本的 Windows 兼容?
    • 此解决方案与所有版本的 Windows 兼容。
  3. 我可以使用此解决方案来控制其他应用程序的音频输出吗?
    • 否,此解决方案仅适用于 Playsound() 函数。
  4. 此解决方案是否可以让我同时播放到多个扬声器?
    • 是,你可以通过使用 waveOutOpen() 函数打开多个音频输出设备来实现这一点。
  5. 如何获得 waveOutSetVolume() 函数的帮助?
    • 有关 waveOutSetVolume() 函数的更多信息,请参阅 Microsoft 文档。