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

时间:2009-11-29 03:16:18

标签: c++ c audio

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

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

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

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

编辑:有一件事我忘了提及:我正在使用* NIX系统。

4 个答案:

答案 0 :(得分:3)

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

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

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

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

第4步: 下载并安装LAME encoder。这将安装libmp3lame库和lame命令行实用程序。

第5步: 现在你可以仔细阅读LAME的API或只是分叉和执行一个过程来跛脚将你的wav文件转换为mp3文件。

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

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

答案 1 :(得分:2)

要在各种格式(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远远优于。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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