2016-08-23 2 views
0

앱을 실행하면 앱에서 내 MP3 파일 "d.mp3"을 재생할 때 아무 소리도 들리지 않습니다. 이 파일은 iTunes에서 정상적으로 재생됩니다.AVAudioPlayer가 mp3 파일을 재생하지 않습니다

프로젝트에 AVFoundation.framework를 추가했습니다. 프로젝트에 "d.mp3"파일을 추가했습니다.

#import <UIKit/UIKit.h> 
#import "AVFoundation/AVAudioPlayer.h" 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    // Play an MP3 file: 
    printf("\n Play an MP3 file"); 
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
             pathForResource:@"d" 
             ofType:@"mp3"]]; 
    printf("\n url = %x", (int)url); 
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] 
            initWithContentsOfURL:url 
            error:nil]; 
    printf("\n audioPlayer = %x", (int)audioPlayer); 
    [audioPlayer play]; 
} 

출력 로그 :

Play an MP3 file 
url = 3ee78eb0 
audioPlayer = 3ee77810 
+0

은 아마'오류에 nil이 아닌 인수를 전달하려고하는 데 도움이? –

+0

나는 AVAudioPlayers가 자신을 보유하고 있다고 생각하지 않습니다. 즉, 플레이어가 즉시 할당 해제 될 가능성이 높습니다. 강력한 인스턴스 변수에 저장할 수 있고 그 인스턴스가 작동하는지 확인할 수 있습니까? – Msencenb

+0

'printf'와'% x'을 사용하지 마십시오. 'NSLog'와'% @'를 사용하십시오. 이렇게하면 포인터 주소보다 훨씬 유용한 정보를 얻을 수 있습니다! – jcaron

답변

1

비 ARC 당신은 그 자체를 유지하지 않기 때문에 재생하는 동안을 유지해야

추가 컨트롤러를 볼 수 있습니다. 그것은 해제되면 즉시 재생을 멈 춥니 다.

ARC 당신은 클래스의 AVAudioPlayer 인스턴스를 유지해야합니다. 연주가 끝난 후 놓습니다. 이 문제가 무엇인지를 알려하려고하면`인수가 볼 수있는 예를 들어,

#import <AVFoundation/AVFoundation.h> 

@interface YourController() <AVAudioPlayerDelegate> { 
AVAudioPlayer *_yourPlayer; // strong reference 
} 
@end 

@implementation YourController 

- (IBAction)playAudio:(id)sender 
{ 
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"d" withExtension:@"mp3"]; 
    _yourPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL]; 
    _yourPlayer.delegate = self; 
    [_yourPlayer play]; 
} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
    if (player == _yourPlayer) { 
     _yourPlayer = nil; 
    } 
} 

@end 

희망이

+0

playAudio의 배짱이 viewDidLoad로 이동 한 후에 만 ​​작동합니다. –

+0

오케이, 코드가 찾고 있던 것을 의미합니까? – gurmandeep

관련 문제