Конфликт между AVAudioRecorder и AVAudioPlayer - PullRequest
1 голос
/ 05 апреля 2010

вот моя проблема:

Код (FooController):

   NSString *path = [[NSBundle mainBundle] pathForResource:@"mySound" ofType:@"m4v"]; 
    soundEffect = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]  error:NULL];
[soundEffect play];
    // MicBlow
    micBlow = [[MicBlowController alloc]init];

И MicBlowController содержит:

        NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
    NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
                              [NSNumber numberWithFloat: 44100.0],                 AVSampleRateKey,
                              [NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
                              [NSNumber numberWithInt: 1],                         AVNumberOfChannelsKey,
                              [NSNumber numberWithInt: AVAudioQualityMax],         AVEncoderAudioQualityKey,
                              nil];

и

[recorder updateMeters];
const double ALPHA = 0.05;
double peakPowerForChannel = pow(10,(0.05*[recorder peakPowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;

NSLog(@"Average input: %f Peak input %f Low pass results: %f",[recorder averagePowerForChannel:0],[recorder peakPowerForChannel:0],lowPassResults);

Если я проигрываю фоновый звук и пытаюсь получить максимум от микрофона, я получаю этот журнал: Средний вход: 0,000000 Пиковый вход -120,000000 Результаты нижних частот: 0,000001

Но если я прокомментирую все части о AVAudioPlayer, это сработает. Я думаю, что есть проблема канала.

Спасибо

1 Ответ

6 голосов
/ 06 апреля 2010

Ну, я нашел решение, и это AVAudioSession!

Используя метод setCategory (с аргументом AVAudioSessionCategoryPlayAndRecord), я могу воспроизводить звуки и записывать звуки с микрофона.

audioSession = [[AVAudioSession sharedInstance] retain];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
[audioSession setActive:YES error: nil];
...