オーディオ常用処理

4743 ワード

1.iosでシステムがオーディオを再生する方法:
a AVAudioPlayerは使いやすいが、ローカルオーディオしか再生できず、ストリーミングメディアの再生はサポートされていない.
b.AVPlayer     ios4.0以降、ローカルオーディオとストリーミングメディアオーディオを再生することができますが、方法が少なく、処理があまり柔軟ではありません.
c.再生システム音声再生caf/wav/aiff形式、時間は30秒未満でなければならない
d.オーディオキュー
2.AVAudioPlayerとAVPlayerを使用するにはAVFoundtionクラスライブラリに入れる必要がある
例:
NSError *error;
    //            
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"mp3"];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
    audioPlayer.delegate = self;
    //    
    [audioPlayer prepareToPlay];
//    if ([audioPlayer play]) {
//        NSLog(@"       ");
//    }
   
    float vlume = audioPlayer.volume;//  
    audioPlayer.numberOfLoops = 3;//    ,      
    float duration = audioPlayer.duration;//   
    audioPlayer.currentTime = 100;//     
    audioPlayer.prepareToPlay;//    ,  
    audioPlayer.play;//  
    audioPlayer.pause;//  
    audioPlayer.stop;//  

AVAudioPlayerの一般的なエージェントメソッド
  
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
//    
}

- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{
//    
}
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{
//       
}

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{
//         
}

3.AVPlayer使用コード例:
    //      
NSString *mp3Url = @"http://zhangmenshiting.baidu.com/data2/music/32197650/23473715212400128.mp3?xcode=048460eee5f7d0205f13a00e1cf710fe";
NSURL *url = [NSURL URLWithString:mp3Url];   
 AVPlayer *player = [[AVPlayer alloc] initWithURL:url];
 [player play];

    //      
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"mp3"];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    AVPlayer *player = [[AVPlayer alloc] initWithURL:url];
    [player play];

4.システム音声を再生するには、AudioToolboxを導く必要がある.frameworkライブラリ
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"44th Street Medium" ofType:@"caf"];
    NSURL *url = [NSURL fileURLWithPath:filePath];
    
//    SystemSoundID soundId;
    unsigned long soundId;
    
    // url        
    AudioServicesCreateSystemSoundID((CFURLRef)url, &soundId);
    
    //      
    AudioServicesPlaySystemSound(soundId);
    
    
    //    
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
#define NeedAudio
#ifdef NeedAudio
    //   
    SystemSoundID _normalId;
#endif
#ifdef NeedAudio
    //      
   _normalId = [self loadId:@"normal.wav"];
#endif
#ifdef NeedAudio  
#pragma mark     id
- (SystemSoundID)loadId:(NSString *)filename
{
    SystemSoundID ID;
    NSBundle *bundle = [NSBundle mainBundle];
    NSURL *url = [bundle URLForResource:kSrcName(filename) withExtension:nil];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &ID);
    return ID;
}
#endif
#ifdef NeedAudio
                AudioServicesPlaySystemSound(_normalId);
#endif

5.バックグラウンド再生タスク
アプリケーションがバックグラウンドにある場合(停止)、iosシステム(4.0以降)は、オーディオの再生(audio)、位置情報(位置決め)、voip(ネットワーク電話)、
バックグラウンドでオーディオを再生するには、a.plistファイルにUIBackgroundModeプロパティを追加し、値はaudioです.b.AVAudioSessionモードを設定し、オーディオ再生時にその属性をAVAudioSessionCategoryPlayback(オーディオ再生前設定)に設定する.
    NSError *error;
    //            
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];

カスタムバックグラウンドタスク:
カスタムバックグラウンドタスクのアクティブ化時間は600秒しかありません.
#pragma mark         
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    //        
    taskId = [application beginBackgroundTaskWithExpirationHandler:^{
        
        //       
        [application endBackgroundTask:taskId];
    }];
    
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];    
}

- (void)timerAction:(NSTimer *)timer {
    count++;
    
    //   500s          ,        ,             
    if (count % 500 == 0) {
        UIApplication *application = [UIApplication sharedApplication];
        //        
        [application endBackgroundTask:taskId];
        
        //        
        taskId = [application beginBackgroundTaskWithExpirationHandler:NULL];
    }
    
    NSLog(@"%d",count);
}