2011-10-12 25 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(); 
} 

をしかし、私は、アプリケーションを起動したときに私は約半秒、その後、何のために音を聞くことができます。 このコードは正しいですか、何か問題がありますか?

おかげ

答えて

7

それは、より多くのコンテキストなしに答えを提供するのは難しい

:-)多くのコードのように私はあなたのAVAudioPlayerを疑うときの方法(ローカル変数として使用する場合は、ガベージコレクタ(GC)によって収集することができそれはFinishedLaunchingですか?)が返されます。

これはフィールドにローカルのplayer変数を推進し、その後場合であれば参照がAVAudioPlayerインスタンスに保持され、それが中断(またはクラッシュ)されることなくプレーできるようにする必要があります保証するであろう。

私が間違っている場合はに編集してください。より多くの文脈をお伝えください。

+0

私は、内部からオーディオを再生する関数を呼び出しています public override bool FinishedLaunching(UIApplication app、 NSDictionaryオプション) { PlayAudio(); } PlayAudio関数に私の質問にコードが含まれています – iFrankz

+0

申し訳ありませんが、状態は明確ではありませんか?それはうまくいくのですか(答えを受け入れて以来と思います)?重要なことは、 'FinishedLaunching'が返ってから'プレイヤー 'が作業/プレイ*を続けるということです。そのオブジェクトのインスタンスはまだ*生きていなければなりません。 – 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電子){' ' player.Play();' ' };' \t \t \t 'if(player.PrepareToPlay()){' 'player.Play();' '}' しかし、今は最悪です。 – iFrankz

+1

私はMonoTouchに慣れていませんが、Objective-Cで開発するときに、リソースがプロジェクトに追加されると、多くのことが静かに実行されることがわかります。考えられるファイル形式のエラーがないことを確認し(.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(); 
関連する問題