Приложение для iPhone - звуковые файлы WAV не воспроизводятся - PullRequest
6 голосов
/ 28 ноября 2010

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

Я пытаюсь воспроизвести звук в приложении для iPhone при нажатии кнопки.Я импортировал звуковую платформу, подключил кнопку методом, у меня есть звуковой файл WAV в комплекте и использую следующий код для воспроизведения звука:

    NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/filename.wav"];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID);

Но при воспроизведении звукаЯ нажимаю кнопку.(Да, мой звук включен.)

Есть идеи, почему это может быть, и как я могу это исправить?Буду рад предоставить дополнительную информацию, если это поможет.

Ответы [ 2 ]

17 голосов
/ 28 ноября 2010

Прежде всего, предпочтительным звуковым форматом для iPhone является формат CAF в формате LE или mp3 для музыки.Вы можете преобразовать wav в caf с помощью встроенной утилиты терминала:

afconvert -f caff -d LEI16 crash.wav crash.caf

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

- (AVAudioPlayer *) soundNamed:(NSString *)name {
    NSString * path;
    AVAudioPlayer * snd;
    NSError * err;

    path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:name];

    if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
        NSURL * url = [NSURL fileURLWithPath:path];
        snd = [[[AVAudioPlayer alloc] initWithContentsOfURL:url 
                                                      error:&err] autorelease];
        if (! snd) {
            NSLog(@"Sound named '%@' had error %@", name, [err localizedDescription]);
        } else {
            [snd prepareToPlay];
        }
    } else {
        NSLog(@"Sound file '%@' doesn't exist at '%@'", name, path);
    }

    return snd;
}
0 голосов
/ 19 декабря 2013

Я не знаю, решили ли вы проблему, но для меня на iOS 7 иногда не работает кастинг (__bridge CFURLRef), и в этом случае, если вы распечатываете результат (__bridge CFURLRef)[NSURL fileURLWithPath:path], он будет 0x0. Это приводит к сбою AudioServicesCreateSystemSoundID(). Возвращаемое значение функции - тип OSStatus. Если произойдет сбой, функция вернет -50, что означает, что один или несколько параметров недопустимы. (Если он выполняется успешно, он возвращает 0.)

Я решил это с помощью функции стиля C, получая путь к файлу:

    CFBundleRef mainBundle = CFBundleGetMainBundle ();
    CFURLRef soundFileUrl;

    soundFileUrl = CFBundleCopyResourceURL(mainBundle, CFSTR("fileName"), CFSTR("wav"), NULL);
    AudioServicesCreateSystemSoundID(soundFileUrl, &soundID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...