iPhone не воспроизводит звук в формате mp3, используя type = @ "mp3" - PullRequest
2 голосов
/ 21 января 2010

Я пишу приложение для iPhone, чтобы при возникновении определенной вещи воспроизводился звук. Я пытаюсь использовать разные файлы WAV, MP3, M4A и у меня периодически возникают проблемы. Приведенный ниже код отлично работает в симуляторе, но MP3 не воспроизводится на iPhone. (3GS, если это имеет значение). Есть идеи? Я изменил mp3-файл на wav, и он будет работать для того, который указан ниже (knock_knock), но не для другого. Возможно, как это закодировано?

Любая помощь приветствуется. Спасибо

Вот код:

SystemSoundID soundID;
NSString *soundFile;

if (something == somethingelse) {
    soundFile = [[NSBundle mainBundle] pathForResource:@"knock_knock" ofType:@"wav"];
}
else {
   soundFile = [[NSBundle mainBundle] pathForResource:@"strike" ofType:@"mp3"];
}
   AudioServicesCreateSystemSoundID((CFURLRef)
                                 [NSURL fileURLWithPath:soundFile]
                                 , &soundID);
AudioServicesPlaySystemSound(soundID);

1 Ответ

2 голосов
/ 21 января 2010

Системные звуки должны быть несжатыми. Я столкнулся с этим и изменил свой код, чтобы использовать AVAudioSession и AVAudioPlayer. Из головы, что-то вроде этого (нужна лучшая проверка ошибок)

    -(void)load {
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [self path]];
    if (fileURL) {

        AVAudioPlayer *newPlayer =
        [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                               error: nil];
        [fileURL release];
        [self stop];
        self.player = newPlayer;
        [newPlayer release];

        [self.player prepareToPlay];
    }   
}

    -(void)play {

    if (self.player == nil)
        [self load];

    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    NSError *err = nil;
    [audioSession setCategory: AVAudioSessionCategoryAmbient error:&err];
    if(err){
        NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
        return;
    }
    [audioSession setActive:YES error:&err];

    self.player.currentTime = 0;
    [self.player play]; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...