説明した方法で音楽を再生しようとしたときに、壊れた例に出会いました。 ランダムに、このサンプルを機能させることができました。 以下は、私の問題の解決策を含む記事の無料翻訳です。
おそらく、すべての開発者が、Windows 7エミュレーターに付属のシステムには、写真に加えて、いくつかの組み込み音楽ファイルがあることを知っているわけではありません。 より正確には、次の3つがあります。
- 別のメロディーソング(00:00:31.3930000)by Windows Phone Artist [Pop]
- Melody Song(00:00:30.4640000)by Windows Phone Artist [ロック]
- Windows Phoneアーティストによるリズムバリエーション(00:00:15.3710000)[R&B]
余談
エミュレーターのロックされていないバージョンを使用しているため、このステートメントの妥当性を検証することは難しくありません。 ミュージック+ビデオハブを選択して、すべての曲を聴くだけです。 フォルダーやシステムレジストリのナビゲーションなど、ロックされていないバージョンが提供する機能に関する記事を準備する予定があります。
曲のリストを取得する
しかし、音楽に戻りましょう。 ライブラリにある音楽のリストと追加情報(曲の長さ、作者など)を個別に取得できます。 これを行うには、最初にMicrosoft.Xna.Frameworkへのリンクを追加してから、次のコードを記述します。
<コード> Microsoft.Xna.Frameworkを使用。 Microsoft.Xna.Framework.Mediaを使用します。 private void buttonGetSongs_Click(オブジェクト送信者、RoutedEventArgs e) { FrameworkDispatcher.Update(); MediaLibrary lib = new MediaLibrary(); foreach(lib.Songsの歌) { Debug.WriteLine(s.Name + "" + s.Duration + "" + s.Artist); } } </ code>
プロジェクトを起動してボタンを押すと、上記のライブラリに含まれる曲のリストが表示されます。 問題はありませんでした。 どうぞ
遊ぶ
音楽のリストを取得するだけでは面白くないので、聞きたいです。 MediaPlayerクラスのインスタンスを使用します
<コード> // 1つのオプション //バックグラウンドミュージック MediaPlayer.Play(lib.Songs [0]); </ code>
それから最初の驚きは私を待っていました。 再生のためにボタンを押すと、プログラムはエラーで終了しましたが、音楽は他のアプリケーション間の切り替えを妨げることなく、バックグラウンドで自動的に再生および再生されました。 少し後に、エラーの発生を回避する方法を理解します。
再生する 第二の方法
元の記事の著者は、ライブラリにあるファイルへのフルパスも引用しました。
- My Documents \ Zune \ Content \ 0100 \ 00 \ 11.wma(メロディーソング)
- My Documents \ Zune \ Content \ 0100 \ 00 \ 15.wma(Another Melody Song)
- My Documents \ Zune \ Content \ 0100 \ 00 \ 17.wma(リズムバリエーション)
それから私は独立した研究を行い、ファイル名で音楽を演奏することにしました。 ここで他の驚きが待っていました。 まず、私にぴったりのコード。
<コード> // 2つのオプション //利用可能な音楽のリスト // My Documents \ Zune \ Content \ 0100 \ 00 \ 11.wma(メロディーソング) // My Documents \ Zune \ Content \ 0100 \ 00 \ 15.wma(Another Melody Song) // My Documents \ Zune \ Content \ 0100 \ 00 \ 17.wma(リズムバリエーション) MediaPlayerLauncher playerlauncher = new MediaPlayerLauncher(); playerlauncher.Media = new Uri(@ "\ My Documents \ Zune \ Content \ 0100 \ 00 \ 17.wma"、UriKind.RelativeOrAbsolute); playerlauncher.Location = MediaLocationType.Install; playerlauncher.Controls = MediaPlaybackControls.Pause | MediaPlaybackControls.Stop; playerlauncher.Show(); </ code>
例は非常に単純です。 MediaPlayerLauncheerを使用して組み込みプレーヤーを呼び出し(実行タスクについてはこちらで説明しました )、完成したファイルパスを渡したいと思いました。 私を混乱させた最初のことは、記事の著者のパスの先頭にバックスラッシュがないことでした。 Windows Mobileでの開発経験があり、すべてのパスはスラッシュ文字(\)で始まっていたことを思い出しました。 私の考えは真実であることが判明しました。 スラッシュがないと、プログラムはエラーで抜け落ちました。 しかし、スラッシュでは、状況はそれほど良くありませんでした。 エラーは表示されませんでしたが、音楽は再生されませんでした。 少し動揺して、プログラムを終了し、エミュレータにインストールされているプログラムのアイコンをクリックしただけです。 そして、誤って彼のプログラムのアイコンをクリックしてから、再生ボタンをクリックしました。 そして、見よ、音楽が鳴った! したがって、最初にVisual Studioまたはエミュレーターから実行されているプログラムのさまざまな動作の状況に遭遇しました。
その後、最初の例に戻り、同じ方法を試しました。 まず、Visual Studioを介してプログラムを実行し、すぐに閉じました。 そして、エミュレータで再び彼のプログラムを起動しました。 すべてがうまくいきました。
最後に、MediaElementを使用して音楽を再生するオプションも試してみました。 悲しいかな、無駄に。 念のためコードをお持ちします。 たぶん、専門家の一人がこの問題を理解できるでしょう。
<コード> // Uri u = new Uri(@ "\ My Documents \ Zune \ Content \ 0100 \ 00 \ 15.wma"); // MediaElement mymedia = new MediaElement(); //mymedia.Source = u; //mymedia.Play(); </ code>
プログラミングを頑張ってください!
PS表示するものがないため、写真はありません。