2013-02-28 7 views
16

私のWPFアプリケーションでサウンドファイルを再生しようとしています。現在、私は次の呼び出しを持っている:私は、ビルドアクションContentとしてMedia/movepoint.wavを指定し、相対的または絶対ファイルパスとして、それをロードする場合WPFサウンドファイルリソースの再生方法

private void PlaySound(string uriPath) 
{ 
    Uri uri = new Uri(@"pack://application:,,,/Media/movepoint.wav"); 
    var player = new MediaPlayer(); 
    player.Open(uri); 
    player.Play(); 
} 

は、今では正常に動作しますので、私は、これはPack URIとは何かを持っている疑いがあるが、私は私の人生のために何ができるか理解できません。

目的は、ファイルを出力ディレクトリに使用できないようにリソースとして保存することです。私はWAVコピーかMP3コピーを提供することができます。

答えて

10

画像ファイルでこれを試しました。これは、別のリソースであるため、uriに関する限り、サウンドファイルと同じように動作します。私は本質的にあなたが持っているものと一致する以下のコードを使用しました。

new Uri(@"pack://application:,,,/Resources/logo.png") 

「Media」フォルダが他のフォルダにネストされていないことを確認してください。そうであれば、そのフォルダも含める必要があります。

.NET Framework 4.0、VS2012を使用しています。

This linkは、全体の「パック」スキームのかなり良い説明を提供します。このトピックに関する

EDIT

より多くの研究は、何がやりたいことは、オーディオやビデオファイルでは可能ではないかもしれないことを示していると思われます。以下の抜粋は、this MSDN pageの備考セクションから抜粋したものです。

あなたが拡張 アプリケーションマークアップ言語(XAML)で、このクラスのインスタンスを宣言することはできますが、コードを使用せずに、そのメディア をロードして再生することはできません。 XAMLでのみメディアを再生するには、MediaElementを使用します。 また、XAMLでインスタンスを宣言した場合、唯一の実用的な使用法は、 Playerプロパティのプロパティ要素構文を満たすことです。

メディアをアプリケーションと共に配布する場合は、メディアファイル をプロジェクトリソースとして使用することはできません。プロジェクトファイルで、 のメディアタイプをContentに設定し、CopyToOutputDirectoryを PreserveNewestまたはAlwaysに設定する必要があります。

MediaPlayerは、独立モードまたはクロックモードのいずれであるかに応じて、2種類のモードで使用できます( )。独立した モードでは、MediaPlayerはイメージに似ており、Openメソッドを使用してメディアを開いて再生すると、 が再生されます。クロックモードでは、 MediaPlayerはアニメーションのターゲットと考えることができ、したがって 再生を制御するタイミング ツリーに対応するタイムラインおよびクロックエントリを持ちます。メディアモードの詳細については、 「マルチメディアの概要」を参照してください。

MediaPlayerは、 アプリケーションのユーザーインターフェイス(UI)に直接追加できる コントロールではないという点でMediaElementとは異なります。 MediaPlayerを使用してロードしたメディアを表示するには、VideoDrawing またはDrawingContextを使用する必要があります。

var sri = Application.GetResourceStream(new Uri("pack://application:,,,/MyAssemblyName;component/Resources/CameraShutter.wav")); 

if ((sri != null)) 
{ 
    using (s == sri.Stream) 
    { 
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(s); 
    player.Load(); 
    player.Play(); 
    } 
} 

CameraShutter.wavとして私のプロジェクトでのリソースを埋め込まれている(とパックURIで示されているように、リソースのサブフォルダ内に常駐):

+0

一見したところ、私たちのPack URI構文は同じなので、私はちょっと困惑しました。しかし、「Resouces」には特別なものがありますか?現在、Mediaフォルダはアセンブリのルートにあります。/Resources/Media/をする必要がありますか?ありがとう – xximjasonxx

+0

PlaySoundを試しました( "pack:// application:,,,/Resources/Media/movepoint.mp3");そして運がない(はい、私はコードを更新しました):) – xximjasonxx

+1

清算をありがとう。なぜ私は彼らがこの著作権侵害の危険を犯すのか理解できます。私はあなたの答えを正しいものとしてマークしました。ありがとう – xximjasonxx

1

以下は、.NET Framework 4.5で動作しているようです。

関連する問題