iOS DeveloperiOS技术资料将来跳槽用

AVFoundation(一) 音频播放 AVAudioPlay

2017-08-03  本文已影响0人  Yanda_Developer

话说也好久不写技术文章了, 最近单位在做这个音视频方面的app, 我将尽可能详细的由浅入深把这一块整理整理和大家分享给一下.


AVAudioPlayer

音频播放是很多应用中的常见需求, 音频播放用的最多的就是AVFoundation为我们提供的AVAudioPlayer, AVAudioPlayer提供了非常方便且简单的方法来实现音频播放. 可以是内存或本地中的音频文件,还有我们常用的音频循环, 甚至还提供音频计量,并且是非常友好的Obj-C接口.
AVAudioPlayer支持的音频格式为:AAC、MP3、ALAC等.
当然AVAudioPlayer也有缺点,那就是只能播放本地的音频.

创建AVAudioPlayer

AVAudioPlayer创建有两种方式:

        NSError *error;
        NSData *audioData = // 获取音频data
        // 创建AVAudioPlayer实例
        AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:audioData error:&error];
        // 错误判断
        if (error) {
            NSLog(@"%@", error);// 在这里我们做了简单的打印,在实际的项目中我们应该做出相应处理
        }
        NSError *error;
        // 获取音频文件URL
        NSURL *url = [[NSBundle mainBundle] URLForResource:@"music" withExtension:@"mp3"];
        // 创建AVAudioPlayer实例
        AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        // 错误判断
        if (error) {
            NSLog(@"%@", error);// 在这里我们做了简单的打印,在实际的项目中我们应该做出相应处理
        }

AVAudioPlayer播放的控制

AVAudioPlayerDelegate

// 将在播放完成后触发,如果顺利播放完成flag为YES, 如果返回NO意味着解码失败.
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;

// 解码失败会触发此方法
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error;

// 发生中断时会触发此方法(比如打进了电话)
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player;

// 下面三个为中断结束时触发此方法,苹果推荐最后一个方法
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags;
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags;
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player ;

写在最后

以后呢,我会定期更新有关AVFoundation的文章,如果有技术性错误,或文笔不妥之处,欢迎大家不吝赐教,或有什么开发中的问题都可以探讨学习.顺便说下, 下一篇文章将围绕音频录制为题展开研究.

喜欢的话给打个心心,成为我更新文章的动力哈.

上一篇下一篇

猜你喜欢

热点阅读