绝对的初学者指导在C / C ++中使用音频?

我一直对音频转换软件感到好奇,但是从初学者的角度来看,我从未见过如何编写一个简单的程序,例如将mp3文件转换为wav。 我不是在询问所涉及的任何复杂算法,只是使用简单库的一个小例子。 搜索SO,我提出了几个名字,包括:

  • 综合工具包
  • OpenAL的
  • DirectSound的

但我无法找到任何这些库的直接示例。 通常我不介意涉及大量的代码,但在这里我完全不了解这个主题,所以我总觉得我在黑暗中拍摄。

这里的任何人都有一个关于使用这些库转换声音文件的简单示例/教程吗? 我的问题专门针对C / C ++,因为这些是我目前正在学习的两种语言,所以我想继续关注它们。

编辑 :我忘了提一件事:我在* NIX系统上。

谢谢大家的回复! 我将它们拼凑在一起,成功地制作了一个将AIFF / WAV / etc文件转换为mp3文件的小工具。 似乎对这个问题有一些兴趣,所以这就是我所做的,一步一步:

步骤1:按照James Morris的建议下载并安装libsndfile库。 这个库非常容易使用 – 它唯一的缺点是它不适用于mp3文件。

第2步:查看libsndfile附带的’examples’文件夹并找到generate.c。 这给出了将任何非mp3文件转换为各种文件格式的一个很好的工作示例。 它还瞥见了libsndfile背后的力量。

第3步:从generate.c中借用代码,我创建了一个只将音频文件转换为.wav文件的ac文件。 这是我的代码: http : //pastie.org/719546

步骤4:下载并安装LAME编码器 。 这将安装libmp3lame库和lame命令行实用程序。

第5步:现在你可以仔细阅读LAME的API,或者只是将一个进程分叉并执行,以将你的wav文件转换为mp3文件。

第六步:带出香槟和鱼子酱!

如果有更好的方法(我确定有)这样做,请告诉我。 我个人从未见过像这样的分步路线图,所以我想我会把它放在那里。

要在各种格式(MP3除外)之间进行转换,请检查libsndfile http://mega-nerd.com/libsndfile/

Libsndfile是一个库,旨在通过一个标准库接口读取和写入许多不同的采样声音文件格式(如MS Windows WAV和Apple / SGI AIFF格式)。

在读写操作期间,格式在应用程序请求或提供的格式与文件的数据格式之间无缝转换。 应用程序员可以保持幸福地不知道诸如文件字符串和数据格式之类的问题

使用起来也很简单,API遵循标准C库函数名称的样式:

http://mega-nerd.com/libsndfile/api.html

示例包含在源代码分发中。

对于实际的音频输出,将需要另一个库,已经提到的SDL可能是一个很好的起点。 虽然SDL也可以读/写音频文件,但libsndfile更胜一筹。

如果您对DSP和计算机感到好奇,请查看Synthesis Toolkit。 好可爱。 它专为学习而设计。 他们在自己网站上的示例和教程非常简单明了。 请记住,编写它的人写下来,这样他们就可以创建真实乐器的声学模型。 因此,他们已经包含了一些只是简单的古怪而有趣的乐器。 它将为您提供处理PCM声音的核心理解。 而你可能会在你的时候将一些有趣的小噪音制作者混在一起。

https://ccrma.stanford.edu/software/stk/

检查libmad http://mad.sourceforge.net “”M“peg”一个“udio”D“编码器库”,应该提供一个很好的例子。 另外,为了便于跨平台音频处理,请查看SDL http://www.libsdl.org/ 。 希望有所帮助。