2012-04-12 62 views
-2

我正在写一个小型音乐程序,我正试着播放一个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()); 

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

+0

任何来自downvoter的信息?我不想创建音乐或MP3播放器。我只想简单直接地播放一个不涉及system()的mp3。是否存在任何使PlaySound()简单易用的API? – user987280 2012-04-12 21:50:27

回答

1

如果在Windows中安装了MP3编解码器,则可以使用Win32 API PlaySound()功能或VCL TMediaPlayer组件播放该文件。

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

0

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

串扰是一个实时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(); 

附带串扰例如Xcode和Visual Studio项目。

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

编辑:

在设定体积方面:有附带串扰被称为“XtGain”您可以在MP3解码器输出和音频设备的输入之间串联连接一个组件。这将允许您设置音频流到达扬声器之前的音量。

EDIT(2012年1月12日):

串扰已被取代所谓的 “DSPatch” 的开源项目。 DSPatch实质上是Crosstalk背后的路由引擎的升级版,不再仅限于音频处理。 DSPatch允许你创建和路由几乎任何类型的可以想象的过程链,并且它可以免费用于个人和专有使用:)