多媒体设备怎么可能没有声音,今天就来练习一下iOS的负责音频和视频的框架AVFoundation其中的音频播放。本来说也练习一下视频的,发现其实原理同音频也大同小异,也就算了,下周一gameloft给了个C++的笔试机会,虽然阴差阳错,但毕竟是大公司的笔试,我还是去瞧瞧吧~一会准备下C++的复习。
音频视频框架需要事先加入到工程里,再在把头文件加入进来,就可以使用了,苹果已经把你想要控制音频播放和想要响应的时间的方法都给你封装到AVAudioPlayer类里面,这就是面向对象的好处啊~我先准备首MP3,当然是最近红遍全球的-----江南style~就来Ta吧,给自己点激情~~~
代码贴上,老话,核心代码来自《iOS 5 Programming CookBook>,自己略微改动一下:
dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(dispatchQueue, ^(void){
NSBundle *mainBundel = [NSBundle mainBundle];
NSString *filePath = [mainBundel pathForResource:@"GangnamStyle" ofType:@"mp3"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
self.songName.text = filePath;
self.songName.textColor = [UIColor redColor];
NSError *err;
self.audioPlay = [[AVAudioPlayer alloc] initWithData:fileData error:&err];
});
源代码是直接就让歌曲一打开程序就播放的,我自己加了个按钮,让自己可以控制歌曲的播放和暂停:
- (IBAction)startOrPause
{
if (isPlaying) {
isPlaying = false;
[self.audioPlay pause];
} else {
[self.audioPlay play];
isPlaying = true;
}
}
没有技术含量,但可以满足一下自己的控制欲~自己梳理一下代码吧,加深些印象:作者本意认为如果音频文件庞大的话,如果你在主进程中加载这个文件会增加用户操作体验不佳的风险(我这可是逐字翻译),确实是如果是从网络上加载网又不好那可不让用户啥等着啥也干不了,所以应该开辟新的进程去干这件事。不过这次是用在本地的文件加载,首先获取音频文件的具体位置,将他放入NSData的实例中,让AVAudioPlaper实例初始化Ta,得到了实例你就可以播放Ta,暂停Ta。当然还有些复杂操作比如播放的途中被其他事件打断的处理,都有响应的方法去处理,我就不去研究了,知道就可以了。自己大致看了一下视频的部分,流程也是一样的,当然是基本的加载播放之类的。我同时也复习了怎么样从当前工程中获取指定类型的文件的步骤,初始化到NSData的实例中你就可以做进一步的处理不是吗。。