2010-01-21 5 views
2

나는 어떤 일이 발생하면 소리가 재생되는 iPhone 앱을 쓰고 있습니다. 다른 WAV, MP3, M4A 파일을 사용하고 간헐적으로 문제가 발생했습니다. 아래의 코드는 시뮬레이터에서 잘 작동하지만 MP3는 iPhone에서 재생되지 않습니다. (3GS가 중요하다면). 어떤 아이디어? mp3 파일을 wav로 변경했는데 아래에 제공된 것 (knock_knock)에서 작동하지만 다른 파일에서는 작동하지 않습니다. 인코딩 된 방식 일 가능성이 있습니까?iPhone이 type = @ "mp3"를 사용하여 mp3 사운드를 재생하지 않습니다.

도움을 주시면 감사하겠습니다. 감사합니다

다음

코드입니다 :

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); 

답변

2

시스템은 압축을 해제 할 필요가 들린다. 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]; 
} 
+0

이것은 정확히 내가 필요로하는 것 ... 감사합니다. – George

관련 문제