iPhone - Звук не воспроизводится ни с помощью AudioServicesPlaySystemSound, ни AVAudioPlayer - PullRequest
0 голосов
/ 12 марта 2011

У меня слишком большая кнопка на UIImagePicker, и я хочу, чтобы при нажатии на нее звучал какой-то звук. Для этого у меня в ресурсах проекта есть звук в форматах m4a и mp3 (для целей тестирования).

Я пытаюсь воспроизвести звук разными способами, пытаясь поочередно использовать форматы m4a и mp3, но из iPhone ничего не выходит (не симулятор).

Рамки включены в проект.

Вот мой пример кода:

#import <AudioToolBox/AudioToolbox.h>
#import <AVFoundation/AVAudioPlayer.h>

- (IBAction) click:(id)sender {
// Try
/*
    SystemSoundID train;
    AudioServicesCreateSystemSoundID(CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("TheSound"), CFSTR("mp3"), NULL), &train);
    AudioServicesPlaySystemSound(train);
*/

// Try
/*
    NSError *error;
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource: @"TheSound" withExtension: @"mp3"] error:&error];
    [audioPlayer play];
    [audioPlayer release];
*/

// Try (works)
    //AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

// Try
/*
    SystemSoundID soundID;
    NSURL *filePath = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"TheSound" ofType:@"mp3"] isDirectory:NO];
    AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
    AudioServicesPlaySystemSound(soundID);
*/  

    NSLog(@"Clicked");
}

Не могли бы вы сказать мне, что происходит не так?

1 Ответ

6 голосов
/ 12 марта 2011

Вы не можете использовать MP3 с Audio Services. Это должен быть файл WAV определенного подтипа. Что касается AVAudioPlayer, он поддерживает файлы MP3, но когда AVAudioPlayer освобождается, он останавливает воспроизведение, и, поскольку вы делаете это сразу после отправки -play (отправляя -release для баланса +alloc), вы ничего не слышите .

Так что либо конвертируйте файл в WAV, либо повесьте на свой AVAudioPlayer достаточно долго, чтобы он мог воспроизводиться. :)

...