オーディオ常用処理
4743 ワード
1.iosでシステムがオーディオを再生する方法:
a AVAudioPlayerは使いやすいが、ローカルオーディオしか再生できず、ストリーミングメディアの再生はサポートされていない.
b.AVPlayer ios4.0以降、ローカルオーディオとストリーミングメディアオーディオを再生することができますが、方法が少なく、処理があまり柔軟ではありません.
c.再生システム音声再生caf/wav/aiff形式、時間は30秒未満でなければならない
d.オーディオキュー
2.AVAudioPlayerとAVPlayerを使用するにはAVFoundtionクラスライブラリに入れる必要がある
例:
AVAudioPlayerの一般的なエージェントメソッド
3.AVPlayer使用コード例:
4.システム音声を再生するには、AudioToolboxを導く必要がある.frameworkライブラリ
5.バックグラウンド再生タスク
アプリケーションがバックグラウンドにある場合(停止)、iosシステム(4.0以降)は、オーディオの再生(audio)、位置情報(位置決め)、voip(ネットワーク電話)、
バックグラウンドでオーディオを再生するには、a.plistファイルにUIBackgroundModeプロパティを追加し、値はaudioです.b.AVAudioSessionモードを設定し、オーディオ再生時にその属性をAVAudioSessionCategoryPlayback(オーディオ再生前設定)に設定する.
カスタムバックグラウンドタスク:
カスタムバックグラウンドタスクのアクティブ化時間は600秒しかありません.
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);
}