播放音频文件


想要在你的应用中播放音频文件,可以使用AV框架(Audio 和 Video 框架)里的AVAudioPllayer 类。

播放音频

- (void)viewDidLoad
{
    [super viewDidLoad];
	
    dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(dispatchQueue, ^(void){
        NSBundle *mainBundle = [NSBundle mainBundle];
        NSString *filePath = [mainBundle pathForResource:@"慢慢" ofType:@"mp3"];
        NSData *fileData = [NSData dataWithContentsOfFile:filePath];
        NSError *error = nil;
        /*start the audio player*/
        self.audioPlay = [[AVAudioPlayer alloc] initWithData:fileData error:&error];
        /*did we get an instance of AVAudioPlayer?*/
        if (self.audioPlay != nil) {
            /*set the delegate and start playing*/
            self.audioPlay.delegate = self;
            if ([self.audioPlay prepareToPlay] && [self.audioPlay play]) {
                /*successfully started playing*/
            }else{
                /*failed to play*/
            }
        }else{
            /*failed to instantiate AVAudioPlayer*/
        }
    });
}


          在viewDidLoad 方法中,我们用GCD异步从歌曲数据中加载数据到NSData实例中,而且把数据提供给音频播放器。这么做是因为加载不同长度的音频文件中的数据需要很长时间,如果我们在主线程中做的话会有影响UI体验的风险。因此,我们利用一个全局的并发队列来确保代码不在主线程中运行。 

处理播放音频时的中断

你想让你的AVAudioPlayer实例在被打断后恢复播放,例如来电。

#pragma mark - 处理播放音频时的中断
-(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{
    /*audio session is interrupted.The player will be paused here */
    
}

-(void)audioPlayerEndInterruption:(AVAudioPlayer *)player withFlags:(NSUInteger)flags{
    if (flags == AVAudioSessionInterruptionFlags_ShouldResume && player !=nil) {
        [player play];
    }
}

当然,,模拟器并不能模拟来电中断,你必须在真机中才可以调试。



你可能感兴趣的:(ios,播放音频文件)