AudioServicesPlaySystemSound, пока активен AVCaptureSession

Я разрабатываю приложение для записи и хочу воспроизвести звук при запуске записи.

К сожалению, похоже, что начиная с iOS 5 невозможно воспроизвести системный звук, когда активен AVCaptureSession с аудиоустройством.

Вот соответствующая часть кода, который я использую

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &_recStartSound);

    //...

    if ([self.captureManager setupSession]) {
        // ... 

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [self.captureManager.session startRunning];
        });

        // ...                    
    }
}

Позже я просто звоню AudioServicesPlaySystemSound(_recStartSound) и ничего не происходит. Однако, если я сделаю тот же вызов до настройки сеанса, звук будет воспроизводиться так, как ожидалось.

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

Как я могу воспроизвести короткий звук прямо перед началом записи AV?


person Gabriele Petronella    schedule 30.07.2013    source источник
comment
Воспроизвести звук, а затем начать захват?   -  person Clay Freeman    schedule 08.08.2013
comment
Это очень похоже на предыдущий вопрос: > stackoverflow.com/questions/16309802/   -  person David Elliman    schedule 08.08.2013
comment
может ли кто-нибудь помочь мне с этим вопросом stackoverflow.com/questions/21059607/   -  person User 1531343    schedule 11.01.2014


Ответы (3)


Вместо этого воспроизводите звук с помощью AVAudioPlayer.

person sc0rp10n    schedule 08.08.2013
comment
Я не понимаю, почему за это проголосовали. Это действительно работает и решает то, о чем спрашивает вопрос (воспроизведение звука, пока активен AVCaptureSession). - person simonfi; 30.08.2014

См. Доступны ли какие-либо другие системные звуки iOS, другие чем "так"?

После некоторых проб и ошибок с доступными системными звуками на iOS 8.1.3 / iPhone 6 я смог воспроизвести эти два:

АудиосервисыPlaySystemSound(1114);

а также

AudioServicesPlaySystemSound(1113);

требуется только одна строка кода для воспроизведения звука после связывания:

  • Аудиотулбокс/AudioToolbox.h

    (см. ссылку выше для более подробной информации)

А вот неполный список доступных звуков (из комментариев выше) http://iphonedevwiki.net/index.php/AudioServices

person Jason R. Escamilla    schedule 09.03.2015

Расширяя ответ sc0rp10n, изменения в коде вопроса будут просто следующими:

Инициализация звукового проигрывателя (_recStartSound имеет тип AVAudioPlayer*):

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"];
    _recStartSound = [[AVAudioPlayer alloc] initWithContentsOfURL: soundURL error: NULL];

    ...
}

Когда вы хотите воспроизвести звук:

[_recStartSound play];
person simonfi    schedule 30.08.2014