AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endianfloat, deinterleaved其中2表示音频文件分为左右两个通道,44100 Hz 为音频文件的采样速率。'lpcm'为音频文件数据的编解码方式,32-bit为音频文件量化位数。little-endian表明数据的存储方式是小端模式,float为浮点类型数据。第四行用于产生buffer的缓冲区域。其中1表示缓冲区域的标示符。标示符可以是任意的数字,但不同的buffer缓冲区域不能具有相同的标示符。Buffer为数据缓冲区域的地址。第五行用于建立source数据源存储区域。其中1表示数据源标示符,其命名规则与buffer缓冲区域一样。Source用于存储声源数据。第六行到第八行定义音频文件特征参数。第九行到第十一行定义包含音频文件路径、文件名称、文件类型在内的CFURLRef数据类型。第十二行通过music_URL文件路径获取音频文件参数,如声源文件大小、式等信息。第十三行将一定大小、并具有特定式的音频文件声源数据装载到buffer缓存中。第十四行建立source声源与buffer缓存之间的联系。第十五行利用open
al播放音频文件。在代码的第十四行和第十五行之间是一段注释掉的声源位置和听者位置的设置,通过设置这两者之间的相对位置以及相对速度既可以实现类游戏效果中的3D音频特效。
由于整个工程沿用的前一小节音频播放器的设计方法,因此在界面设计、规划变量并连接输入输出口、以及工程的设计上都是一致的。不同点在于,如果正常利用open al播放音频还需要将open al.framework添加进去。在测试open al时,点击ply_music可以听到一段优美的音乐。
3.4 利用open al处理pcm音频文件。
在处理pcm文件之前,我们首先需要来分析一下,wav中存放的音频文件都有哪些非常重要的参数,以及这些参数我们如何利用open al来设置。我们通过matlab仿真工具,读取一个测试用wav音频文件:
[x,fs,nbits,c]=wavread('music.wav')
其中x存储的是wav音频文件的具体数据。fs为音频文件的采样频率,nbits存放音频文件的量化位数。以上三个参数尤为重要。在这里x的时域波形图如图1所示:可以看到图像好像有绿色和蓝色两种颜色。我们进一步将图像放大处理可以看到:这里其实是两种波形叠加在一起的效果。
通过分析x的数据结构:size(x)
ans =
8826882
x是一个二维矩阵。每一个维度对应着一个音频的通道,同时在波形上体现在如图所示的结果。

接下来我们来分析经过解码之后的音频数据,我们选择前10个点进行分析:
ans =
0.0321 0.0334 0.0352 0.0367 0.0388 0.0422 0.0457 0.0486 0.0507 0.0505
matlab对音频信号处理是采用归一化的数据类型。为了可以进一步探究open al是如何利用这些数据进行播放的,我们需要将数据还原为最原始的数据类型。刚才我们分析了wav中比较重要的音频文件参数。X、fs、nbits。其中nbits为音频信号的量化位数。因此我们可以对数据x进一步分析:x*32767。
ans =

1.0e03 *
1.0530 1.0950 1.1540 1.2020 1.2730 1.3840 1.4970 1.5930 1.6599 1.6559
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28346-3.html
兄弟说的太对了
说白了