播放音频文件和调整系统音量

Posted

技术标签:

【中文标题】播放音频文件和调整系统音量【英文标题】:playing audio files and adjusting system volume 【发布时间】:2012-04-12 21:35:00 【问题描述】:

我正在编写一个小型音乐程序,并且正在尝试播放 mp3。现在,我有一些非常丑陋的东西,但它有效:

std::string command("cd \"C:\\Program Files (x86)\\Windows Media Player\" && wmplayer /play \"D:\\music\\A Perfect Circle\\eMOTIVe\\a.mp3");

system(command.c_str());

有没有更好或更可靠的方法来做到这一点?另外,如何调整主系统音量?

【问题讨论】:

反对者的任何信息?我不打算创建音乐或 mp3 播放器。我只是想要一种简单直接的方式来播放不涉及 system() 的 mp3。是否存在任何 API 使其像 PlaySound() 一样简单? 【参考方案1】:

如果在 Windows 中安装了 MP3 编解码器,您也许可以使用 Win32 API PlaySound() 函数或 VCL TMediaPlayer 组件来播放文件。

要设置主卷,请使用 Win32 API waveOutSetVolume() 函数。

【讨论】:

【参考方案2】:

我创建了一个名为“Crosstalk”的 C++ 音频库。

Crosstalk 是一个实时 C++ 音频引擎,可让您创建和路由音频系统。

以下是播放 mp3 文件的示例:

XtSystem system;
XtMp3Decoder mp3Decoder;
XtAudioDevice audioDevice;

long md = system.addComponent(&mp3Decoder);
long ad = system.addComponent(&audioDevice);

system.connOutToIn(md,0,ad,0);
system.connOutToIn(md,1,ad,1);

mp3Decoder.loadFile("../05 Tchaikovski-Swan Lake-Scene.mp3");
mp3Decoder.play();

Crosstalk 包含示例 Xcode 和 Visual Studio 项目。

您可以下载 Crosstalk 并查看 API 文档和许可详细信息here。

编辑:

在设置音量方面:Crosstalk 包含一个名为“XtGain”的组件,您可以在 mp3 解码器输出和音频设备输入之间串联连接。这将允许您在音频流到达扬声器之前设置其音量。

编辑(01-12-2012):

Crosstalk 已被一个名为“DSPatch”的开源项目取代。 DSPatch 本质上是 Crosstalk 背后路由引擎的升级版本,不再局限于音频处理。 DSPatch 允许您创建和路由几乎可以想象的任何类型的流程链,并且免费供个人和专有使用:)

【讨论】:

以上是关于播放音频文件和调整系统音量的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中调整音频文件的音量[重复]

音频文件播放没有音量

Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)

swift中的音频播放器没有获得音量和音高的价值

使用 AudioQueue 播放 PCM 音频流音量低

uniapp实现音频播放抢占系统音频焦点