Воспроизведение файлов wav с помощью AudioServices на iPhone

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

Я добавил фреймворк AudioToolbox. В свой файл .h я включил файл Audiotoolbox.h и имеет следующие объявления

//Beep Sound
SystemSoundID   soundFileObject;
SystemSoundID   recycleFileObject;

В моем файле .m я регистрирую оба файла wav следующим образом

CFURLRef soundFileURLRef = CFBundleCopyResourceURL (CFBundleGetMainBundle (),CFSTR ("Beep"),CFSTR ("wav"),NULL );
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject );

CFURLRef soundFileURLRef2 = CFBundleCopyResourceURL (CFBundleGetMainBundle (),CFSTR ("Recycle"),CFSTR ("wav"),NULL );
AudioServicesCreateSystemSoundID (soundFileURLRef2,&recycleFileObject );

И я написал два метода для индивидуального воспроизведения каждого файла.

-(void)playBeepSound
{
    NSLog(@"Beep sound called : %d", soundFileObject);
    AudioServicesPlaySystemSound (soundFileObject);
}


-(void)playRecycleSound
{
    NSLog(@"Recycle sound called : %d", recycleFileObject);
    AudioServicesPlaySystemSound (recycleFileObject);
}

Но я могу воспроизводить только звуковой сигнал, но не второй звуковой файл wav.

Что за ошибка ???

Спасибо


person Biranchi    schedule 19.04.2010    source источник


Ответы (1)


На вашем месте я бы обернул код Audio Toolbox в класс, чтобы вы могли выделить общий код и воспроизводить звуки с большим комфортом (пример кода). Это также может решить вашу проблему, поскольку где-то есть небольшая опечатка - пример кода, который вы нам предоставили, выглядит нормально. (Вы пытались записать все в журнал? Нет нулей, все вызывается должным образом? Вы пытаетесь воспроизвести оба звука одновременно или между ними есть задержка? Имеет значение, какой звук запускается первым?)

person zoul    schedule 19.04.2010
comment
Когда звук заканчивается, нам нужно освободить этот звуковой объект - как мы узнаем, когда звук прекратится? (используя вашу обертку) - person Jonny; 02.09.2010
comment
Системные звуковые службы обычно используются для коротких эффектов пользовательского интерфейса. Это означает, что они предназначены для повторного использования: у вас будет только один экземпляр определенного семпла, проигрываемый снова и снова, без освобождения. Например, при освобождении контроллера представления может не хватить памяти. - person zoul; 02.09.2010