Играть и записывать звук одновременно с iPhone SDK? - PullRequest
4 голосов
/ 06 июля 2010

Я пытаюсь обнаружить вход от микрофона, а также воспроизводить звуки, которые можно включать или выключать, но они всегда воспроизводятся, когда микрофонный слушатель активен.

Я инициализировал AVAudioSession вметод viewDidLoad выглядит так:

AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *err = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&err];
[session setActive:YES error:&err];

Затем настройте звук, который должен воспроизводиться:

NSURL *activeUrl = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audio_file.caf", [[NSBundle mainBundle] resourcePath]]];
activePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:activeUrl error:nil];
activePlayer.numberOfLoops = -1;
activePlayer.currentTime = 0;
activePlayer.volume = -1.5;

И я использую класс SCListener , чтобы сделатьзапись.Когда я запускаю это на телефоне, рекордер работает просто отлично, но звук не зацикливается, даже когда я вызываю play для него в методе viewDidLoad.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Большое спасибо за ответы. Я действительно выяснил это некоторое время назад, но не удосужился обновить это. Оказалось очень просто. Вы должны установить категорию AVAudioSession равной AVAudioSessionCategoryPlayAndRecord.

Практически вся необходимая документация находится здесь в справочнике классов:

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html

0 голосов
/ 23 декабря 2010

У меня была похожая проблема с вами - код работал на симуляторе, но не на устройстве. У меня была эта проблема при использовании Cocos2D (Denshion) вместе с AVAudioRecorder и AVAudioPlayer.

Основная проблема, по-видимому, заключается в том, что AVAudioRecorder и AVAudioPlayer устанавливают AVAudioSessionCategory от вашего имени, но если вы сами манипулируете им, они, похоже, помнят, что вы «самостоятельно управляете» им и прекращаете управлять им для вас. 1004 *

См. это сообщение в блоге , которое мне помогло (хотя я все еще не решил проблему самостоятельно; я обновлю этот пост, когда решу ее).

...