Не удалось воспроизвести системный звук после перехода на iOS 5 - PullRequest
11 голосов
/ 22 октября 2011

Так я воспроизводил звуковой звуковой эффект в iOS 4 :

SystemSoundId beepOnSoundId;

CFURLRef soundUrl = CFBundleCopyResourceURL(
    CFBundleGetMainBundle(), 
    CFSTR("beep"), 
    CFSTR("wav"), 
    NULL
);

// soundUrl logged:
// file://localhost/var/mobile/Applications/ ... beep.wav

AudioServicesCreateSystemSoundID(soundUrl, &beepOnSoundId);

// beepOnSoundId logged: 4097

AudioServicesPlaySystemSound(beepOnSoundId);

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

Как изменился API в iOS 5 , что нарушает мой код воспроизведения звука?

Проблема может быть в том, что у меня работает AVCaptureSession во время воспроизведения звука.iOS 5 почему-то не позволяет вам сделать это больше.Мне нужно воспроизвести звуковой сигнал, пока я что-то записываю с камеры.

Ответы [ 4 ]

13 голосов
/ 25 октября 2011

Этот отчет об ошибке может быть связан с вашим вопросом, если у вас запущен AVCaptureSession.

В iOS 5 при использовании вызова AudioServicesPlaySystemSound он будет не работает при активном AVCaptureSession с аудиоустройством активный.

10 голосов
/ 28 октября 2011

Одной из проблем может быть то, что в ios 5, когда вы вызываете AudioServicesPlaySystemSound, он перестает работать, если активен AVCaptureSession с активным аудиоустройством.

Также проверьте имена импортов в ваших файлах, убедитесь, что импорт audiotoolbox присутствует во всех ваших контроллерах представления.Я также пошел к руководству и получил это для вас :) Я оставлю название веб-сайта внизу

Шаг 1: Импортируйте AudioToolbox Framework Начните с импорта инфраструктуры Audio Toolbox в ваше приложение, чтобы сделатьСистемные звуковые сервисы доступны для вашего кода.Для этого выберите проект «PhoneAppSkin» на панели «Навигатор проектов» в XCode, затем выберите «PhoneAppSkin» в разделе «TARGETS» и, наконец, выберите вкладку «Build Phases».После этого ваш экран должен выглядеть примерно так:

enter image description here

Далее нажмите раскрывающийся список «Link Binary With Libraries» и нажмите символ «+», чтобы добавитьновый каркас для фазы связывания нашего проекта.

enter image description here

Наконец, найдите каркас «AudioToolbox» во всплывающем окне и нажмите «Добавить».

enter image description here

Затем откройте файл PhoneViewController.h и добавьте строку, необходимую для фактического импорта платформы Audio Toolbox в ваш класс:

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>

Теперь функции Audio Toolbox должны работать

Сайт, с которого я получил изображения: http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_playing-systemsoundid/

6 голосов
/ 28 октября 2011

У меня почти такой же код, и он работает для меня в iOS5 с включенными сеансами видео и аудио. Если у вас есть весь код функции для воспроизведения звука, проблема может заключаться в том, что объект SystemSoundID освобождается до воспроизведения звука, или проблема может быть связана с URL-адресом. Но я думаю, что это первый.

Смотрите, работает следующий код:

Объявление SystemSoundID находится в заголовке объекта, и объект живет достаточно долго для воспроизведения звука.

    SystemSoundID soundID;

AudioServicesCreateSystemSoundID находится в инициализации объекта.

    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                                                   pathForResource: @"sound" ofType:@"wav"]], &soundID);

Тогда вы можете использовать AudioServicesPlaySystemSound где угодно внутри объекта.

    AudioServicesPlaySystemSound(soundID);

Попробуйте поместить эти кусочки кодов в соответствующие места, и вы должны услышать звук.

1 голос
/ 17 апреля 2013

В моем конструкторе:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
NSURL* musicFile  = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                                   pathForResource:@"video-sent"
                                                   ofType:@"caf"]];
self.sentSound = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
[self.sentSound prepareToPlay];

Функция playSentSound

- (void)playSentSound
{
    DLog(@"PLay Sound %@", self.sentSound);
    [self.sentSound play];
}

потом в коде я просто называю это

[self playSentSound];

Ключом здесь являются первые 4 строки ...; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...