首页 > 代码库 > <图形图像,动画,多媒体> 读书笔记 --- 音效

<图形图像,动画,多媒体> 读书笔记 --- 音效

音频多媒体文件主要是存放音频数据信息,音频文件在录制的过程中把声音信号,通过音频编码,变成音频数字信号保存到某种格式文件中.在播放过程中在对音频文件解码,解码出的信号通过扬声器等设备就可以转成音波.音频文件在编码的过程中数据量很大,所以有的文件格式对于数据进行了压缩,因此音频文件可以分为:


无损格式,是非压缩数据格式,文件很大一般不适合移动设备,例如:WAV,AU,APE等文件

有损格式,对于数据进行了压缩,压缩后丢掉了一些数据,例如MP3,WMA等文件.


1.WAV文件

WAV文件目前是最流行的无损压缩格式,WAV文件格式灵活,可以存储多种类型的音频数据,由于文件较大不太适合于移动设备这些存储容量小的设备


2.MP3文件

MP3格式现在非常流行,MP3是一种有损压缩格式,他尽可能地去掉人耳无法感觉的部分和不敏感的部分,MP3是利用MPEG Audio Layer 3的技术将数据以1:10甚至1:12的压缩率,压缩成容量较小的文件,这么高的压缩比率非常适合存储容量小得移动设备


3.WMA文件

WMA格式是微软公司发布的文件格式,也是有损压缩格式.它与MP3格式不分伯仲.在低比特率渲染情况下,WMA格式显示出来比MP3更多的优点,压缩比MP3更高,音质更好.但是在高比特率渲染情况下MP3还是占优势.


4.CAFF文件

CAFF文件是苹果公司开发的专门用于MAC OS X 和iOS系统无法所音频格式.它被设计来替换老的WAV格式


5.AIFF

AIFF文件是苹果开发的专业音频文件格式.AIFF的压缩格式是AIFF-C,将数据以4:1压缩率进行压缩,专门应用于MAC OS X 和 iOS系统.


语音合成

AVSpeechUtterance *utt = [AVSpeechUtterance speechUtteranceWithString:@"test 文本"];
    utt.rate = [self.slider value];
    [self.speechSynthesizer speakUtterance:utt];



System Sound API

System Sound API是属于core Audio中属于面向c语言的次层次API(书上是这么说,但看代码应该是包含了AudioToolbox)


播放系统声音

播放系统声音主要使用AudioServicesPlaySystemSound函数进行播放,主要用于游戏音效和操作声音等.他的工作流程大致是:

1.播放前的准备阶段:使用AudioServicesCreateSystemSoundID函数创建SystemSoundID,然后使用AudioServicesAddSystemSoundCompletion注销声音播放完成事件回调函数.

2.播放阶段:使用AudioServicesPlaySystemSound播放声音实现.

3.播放后的处理阶段:释放资源,注销事件回调函数,这包括了使用AudioServicesDisposeSystemSoundID函数释放SystemSoundID和使用AudioServicesRemoveSystemSoundCompletion注销声音播放完成事件回调函数.


//定义一个回调函数,用于当声音播放完成之后回调。
void SoundFinishedPlayingCallback(SystemSoundID sound_id, void* user_data)
{
    //注销声音播放完成事件回调函数。
    AudioServicesRemoveSystemSoundCompletion(sound_id);
    //释放SystemSoundID
	AudioServicesDisposeSystemSoundID(sound_id);
}



@implementation ViewController


- (IBAction)playSystemSound:(id)sender {
    NSURL* system_sound_url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                                      pathForResource:@"AlertChordStroke" ofType:@"wav"]];
    
    SystemSoundID system_sound_id;
    
    //创建SystemSoundID
    AudioServicesCreateSystemSoundID(
                                     (CFURLRef)CFBridgingRetain(system_sound_url),
                                     &system_sound_id
                                     );
    
    //注销声音播放完成事件回调函数。
    AudioServicesAddSystemSoundCompletion(
                                          system_sound_id,
                                          NULL,
                                          NULL,
                                          SoundFinishedPlayingCallback,
                                          NULL
                                          );
    
    //播放系统声音
    AudioServicesPlaySystemSound(system_sound_id);
    
}



震动设备

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);


OpenAL

播放声音的流程

1.获得设备信息

2.获得环境信息

3.初始化缓冲区

4.初始化声援

5.将缓冲区和声源绑定

6.初始化听众

7.播放

8.释放内存


初始化缓存的过程

1.打开文件

2.获得实际音频文件大小

3.开辟音频内存数据空间

4.读取的文件到内存中

5.关闭文件

6.从OpenAL中获得缓冲区ID

7.内存中音频数据复制到缓冲区

8.清除内存中音频数据



<图形图像,动画,多媒体> 读书笔记 --- 音效