読書ノート---オーディオデバイスアクセス
5998 ワード
オーディオアプリケーションを開発し、主に2つのフレームワークAVFoundationとCoreAudioがある.
CoreAudioの内容が多くて使うのも面倒で、彼は4つの主要なオーディオ処理エンジンAPI:System Sound、Audio Unit、Audio QueueとOpenALを持っています
System SoundそれはCのオーディオAPIに基づいて、システムの音を再生することができて、それは短い音を再生して、30 sを超えません.
Audio Unitは最下層の音声生成器で、元のオーディオサンプルを生成し、オーディオ値を出力バッファに配置する.Audio Unitは、複数種類の音声を混合することも可能である.
Audio Queueは、オーディオの録画、再生、一時停止、サイクル、同期処理を提供することができる.
OpenALは位置変化に基づく3 D音声の工業化標準APIであり、彼のAPIインタフェースはOpenGLと非常に似ている.主にゲームの音響処理に応用する.
Audio Fileサービスこのサービスは各種の異なるオーディオ容器フォーマットを処理する任務を簡略化した.異なる点を考慮せずに、さまざまなサポートオーディオストリームを読み書きできます.
Audio File Streamサービスは、ネットワークのオーディオストリームデータを読み書きし、1つのストリームからデータを読み取る場合、このサービスを使用してこのストリームを解析し、そのフォーマットを決定し、最終的にオーディオパケットを1つのオーディオキューに渡すか、または自分で処理する.
Audio Converterサービスによるオーディオデータフォーマットの変換
Audio Sessionサービスオーディオリソースとシステムの関係の調整
AVFoundationフレームワークでは、AVAudioPlayerクラスは一般的なオーディオ再生を実現することができ、5 sを超える音声を再生するために用いる、ローカル音声のみを再生することができ、ネットワークメディアファイルを再生することができない.
レコーディング
より多くの乾物は、原作をサポートしてください.http://item.jd.com/11436547.html
CoreAudioの内容が多くて使うのも面倒で、彼は4つの主要なオーディオ処理エンジンAPI:System Sound、Audio Unit、Audio QueueとOpenALを持っています
System SoundそれはCのオーディオAPIに基づいて、システムの音を再生することができて、それは短い音を再生して、30 sを超えません.
Audio Unitは最下層の音声生成器で、元のオーディオサンプルを生成し、オーディオ値を出力バッファに配置する.Audio Unitは、複数種類の音声を混合することも可能である.
Audio Queueは、オーディオの録画、再生、一時停止、サイクル、同期処理を提供することができる.
OpenALは位置変化に基づく3 D音声の工業化標準APIであり、彼のAPIインタフェースはOpenGLと非常に似ている.主にゲームの音響処理に応用する.
Audio Fileサービスこのサービスは各種の異なるオーディオ容器フォーマットを処理する任務を簡略化した.異なる点を考慮せずに、さまざまなサポートオーディオストリームを読み書きできます.
Audio File Streamサービスは、ネットワークのオーディオストリームデータを読み書きし、1つのストリームからデータを読み取る場合、このサービスを使用してこのストリームを解析し、そのフォーマットを決定し、最終的にオーディオパケットを1つのオーディオキューに渡すか、または自分で処理する.
Audio Converterサービスによるオーディオデータフォーマットの変換
Audio Sessionサービスオーディオリソースとシステムの関係の調整
AVFoundationフレームワークでは、AVAudioPlayerクラスは一般的なオーディオ再生を実現することができ、5 sを超える音声を再生するために用いる、ローカル音声のみを再生することができ、ネットワークメディアファイルを再生することができない.
<span style="font-size:18px;">- (IBAction)play:(id)sender {
NSLog(@"player %i",player.isPlaying);
NSError *error = nil;
if (player == nil) {
player = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"1" ofType:@"mp3"]] error:&error];
player.delegate = self;
}
if (error) {
NSLog(@"%@",[error description]);
}else {
[player play];
}
}
- (IBAction)pause:(id)sender {
if (player&&player.isPlaying) {
[player pause];
}
}
- (IBAction)stop:(id)sender {
if (player) {
[player stop];
player.delegate = nil;
player = nil;
}
}
#pragma delegate
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
NSLog(@" ");
}
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{
NSLog(@"error : %@",[error localizedDescription]);
}
- (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{
NSLog(@" ");
}
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{
NSLog(@" ");
}
</span>
レコーディング
- (NSString *)doc{
// NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
// return [arr objectAtIndex:0];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
- (IBAction)record:(id)sender {
if (recoeder == nil) {
//
NSString *filePath = [NSString stringWithFormat:@"%@/rec_audio.caf",[self doc]];
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
NSError *error = nil;
[[AVAudioSession sharedInstance]setCategory:AVAudioSessionCategoryRecord error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];
NSMutableDictionary *settings = [NSMutableDictionary dictionary];
[settings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];//
[settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];//
[settings setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];//
[settings setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];//
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];//
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];//
recoeder = [[AVAudioRecorder alloc]initWithURL:fileUrl settings:settings error:&error];
recoeder.delegate = self;
}
if (recoeder.isRecording) {
return;
}
if (player && player.isPlaying) {
[player stop];
}
[recoeder record];
self.label.text = @" ...";
}
- (IBAction)stop:(id)sender {
self.label.text = @" ...";
if (recoeder.isRecording) {
[recoeder stop];
recoeder.delegate = nil;
recoeder = nil;
}
if (player.isPlaying) {
[player stop];
}
}
- (IBAction)play:(id)sender {
if (recoeder.isRecording) {
[recoeder stop];
recoeder.delegate = nil;
recoeder = nil;
}
if (player.isPlaying) {
[player stop];
}
NSString *filePath =
[NSString stringWithFormat:@"%@/rec_audio.caf", [self doc]];
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
NSError *error = nil;
//AVAudioSession AVAudio Session , .AVAudioSession ,
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
// ,
[[AVAudioSession sharedInstance] setActive:YES error:&error];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:&error];
if(error) {
NSLog(@"%@",[error description]);
} else {
[player play];
_label.text = @" ...";
}
}
#pragma delegate
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{
NSLog(@" ");
}
- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error{
NSLog(@" %@",[error localizedDescription]);
}
- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder{
NSLog(@" ");
}
- (void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder withOptions:(NSUInteger)flags{
NSLog(@" ");
}
より多くの乾物は、原作をサポートしてください.http://item.jd.com/11436547.html