2011-10-12 3 views
6

모노크롬을 사용하여 응용 프로그램을 만들고 있습니다. 기본적으로 응용 프로그램이로드되는 즉시 mp3를 재생해야합니다. main.cs에 나는 메인 컨트롤러를 밀어 전에이 조각을 추가 :모노크롬 재생 mp3

AVAudioPlayer player = new AVAudioPlayer(); 
NSUrl mediaFile = NSUrl.FromFilename("Content/Audio/music1.mp3"); 

player = AVAudioPlayer.FromUrl(mediaFile); 
player.Delegate = new PlayerDelegate(); 

if(player.PrepareToPlay()){ 
    player.Play(); 
} 

을하지만 응용 프로그램을 시작할 때 나는 약 0.5 초 후 아무것도 소리를들을 수 있습니다. 이 코드가 맞습니까? 아니면 잘못된 것이 있습니까?

감사

답변

7

내가 의심

:-) 더 많은 코드처럼, 더 문맥없이 대답을 제공하기 어렵다 당신의 로컬 변수로 사용하는 경우 AVAudioPlayer, 가비지 컬렉터 (GC)에 의해 수집 될 수있을 때 방법 (그것은 FinishedLaunching입니까?))가 반환됩니다.

이 다음 참조가 AVAudioPlayer 인스턴스를 유지하고 중단 (또는 충돌)하지 않고 재생할 수 있도록해야 보장 할 필드에 지역 player 변수를 홍보하는 경우라면.

내가 틀린 경우 으로 편집하고 더 많은 상황을 제공하면 더 잘 도와 드릴 수 있습니다.

+0

방금 ​​내부에서 오디오를 재생하는 기능을 호출했습니다. public override bool FinishedLaunching (UIApplication app, NSDictionary 옵션) { PlayAudio(); } PlayAudio 함수에 내 질문에 해당 코드가 포함되어 있습니다. – iFrankz

+0

죄송합니다. 상태가 명확하지 않습니까? 작동합니까 (대답을 수락 한 이후로 추측하겠습니다)? 기억해야 할 중요한 점은'FinishedLaunching '이 반환 된 후에도'player'가 계속 작업/재생 *을하기 때문에 해당 객체의 인스턴스가 * 살아 있어야한다는 것입니다. – poupou

+0

예 변수를 필드로 승격했는데 성공했습니다. 나는 문제가 GC의 행동과 관련이 있다고 추정한다. 많은 감사 poupou – iFrankz

0

AVAudioPlayerDelegate에 등록하고 audioPlayerEndInterruption 방법에 백업 다시 음악을 시작하십시오.

+0

안녕 Ralfonso, 답장을 보내 주셔서 감사합니다. 나는 다음과 같이 시도했다 : 'AVAudioPlayer player = new AVAudioPlayer();' 'NSUrl mediaFile = NSUrl.FromFilename ("Content/Audio/music1.mp3");' 'player = AVAudioPlayer.FromUrl (mediaFile);' '= player.Delegate 새로운 AVAudioPlayerDelegate()' \t \t \t 'player.EndInterruption + = 대리자 (객체 송신자있는 EventArgs E) {'' player.Play()'' }' \t \t \t 'if (player.PrepareToPlay()) {' 'player.Play();' '}' 그러나 이제는 최악입니다. – iFrankz

+1

MonoTouch에 너무 익숙하지 않지만 Objective-C로 개발할 때 리소스가 프로젝트에 추가 될 때 Xcode가 많은 일을 자동으로 수행한다는 것을 알고 있습니다. 가능한 파일 형식 오류 (.wav 시도)가 없는지 확인하거나 주 번들에서 파일을로드하십시오. 예를 들면 다음과 같습니다. [link] http://www.techotopia.com/index.php/Playing_Audio_on_an_iPhone_using_AVAudioPlayer_ (iOS_4) #Support_Audio_Formats – Ralfonso

0

는 지금은 정말 쉽습니다 :

  //enable audio 
      AudioSession.Initialize(); 

      //load the sound 
      sound = SystemSound.FromFile("Sounds/rev.wav"); 
      sound.PlaySystemSound();