2009-11-29 87 views
12

我一直对音频转换软件感到好奇,但是从初学者的角度来看,我从来没有看到过如何编写一个简单的程序,例如将mp3文件转换为wav的简单程序。我不是在问任何涉及的复杂算法,只是一个使用简单库的小例子。因此搜索,我想出了几个名字,包括:在C/C++中使用音频的绝对初学者指南?

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

但我无法找到一个简单的例子任何这些库。通常我不介意在代码中涉水,但在这里我完全没有关于这个主题的知识,所以我总是觉得我在黑暗中拍摄。

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

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

+0

这是一个非常困难的问题,因为你通常不抽象地处理音频,你想要播放它 - 这将取决于操作系统API。必须编写API来处理厨房水槽。 – 2009-11-29 04:44:43

回答

3

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

步骤1: 下载并安装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或者只是叉& EXEC一个过程瘸子你的WAV文件转换为MP3文件。

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

如果有更好的方法(我确定有这样做),请让我知道。我个人从来没有见过这样的循序渐进的路线图,所以我想我会把它放在那里。

0

检查libmad http://mad.sourceforge.net“M”钉“A”音频“D”ecoder库“,应该提供一个很好的例子。 对于轻松跨平台的音频处理,请检查SDL http://www.libsdl.org/。 希望有所帮助。

+0

我得到了这一个工作,但例子创建.PCM文件,我不知道如何发挥。在superuser.com的相关问题在这里:http://superuser.com/questions/76665/playing-a-pcm-file-on-a-unix-system – 2009-11-29 18:44:21

+0

更新:我可以通过转到项目导入Audacity中的PCM文件>导入原始数据。 – 2009-11-29 21:55:22

1

如果您对DSP和计算机感兴趣,请查看综合工具包。好可爱。它专为学习而设计。他们在网站上的示例和教程非常简单明了。请记住,编写它的人写了它,以便他们可以创建真实乐器的声学模型。因此,他们已经包含了一些简单古怪但乐趣的乐器。它会给你一个处理PCM声音的核心理解。而你可能会在你的时候一起闯入一些有趣的小噪音制造者。

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

2

对于各种格式之间的转换(除MP3)检查libsndfile http://mega-nerd.com/libsndfile/

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

在读取和写入操作, 格式被无缝应用程序 已请求或提供的格式和 文件的数据格式之间转换 。该 应用程序员可以保持 一无所知,如 文件字节序和数据格式问题

这也是简单的按照标准C库函数名称的风格来使用,与API:

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

并且示例包含在源代码发布中。

对于实际的音频输出,需要另一个库,如已经提到的SDL可能是一个很好的开始。虽然SDL也可以读取/写入音频文件,但libsndfile要优越得多。