web-dev-qa-db-ja.com

WPFサウンドファイルリソースを再生する方法

WPFアプリケーションでサウンドファイルを再生しようとしています。現在、私は次の電話をしています:

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

ここで、ビルドアクションContentとしてMedia/movepoint.wavを指定し、相対または絶対ファイルパスとしてロードすると、正常に機能するため、これはPack URIと関係があると思われますが、私は私の人生のために何を理解できない。

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

18
xximjasonxx

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

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

「メディア」フォルダが他のフォルダにネストされていないことを確認してください。含まれている場合は、そのフォルダも含める必要があります。

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

このリンク 物事の「パック」スキーム全体のかなり良い説明を提供します。

[〜#〜]編集[〜#〜]

このトピックに関するさらなる調査は、あなたがやりたいことがオーディオまたはビデオファイルでは不可能かもしれないことを示しているようです。以下の抜粋は、 このMSDNページ の備考セクションから抜粋したものです。

このクラスのインスタンスはExtensibleApplication Markup Language(XAML)で宣言できますが、コードを使用せずにメディアをロードして再生することはできません。 XAMLでのみメディアを再生するには、MediaElementを使用します。また、XAMLでインスタンスを宣言する場合、実際の使用法は、Playerプロパティのプロパティ要素構文を入力することだけです。

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

MediaPlayerは、プレーヤーを駆動しているものに応じて、独立モードまたはクロックモードの2つの異なるモードで使用できます。独立モードでは、MediaPlayerは画像に類似しており、Openメソッドで開かれたメディアが再生を駆動します。クロックモードでは、MediaPlayerはアニメーションのターゲットと見なすことができるため、タイミングツリーに再生を制御する対応するタイムラインとクロックエントリがあります。メディアモードの詳細については、マルチメディアの概要を参照してください。

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

10
Stewbob

以下は.NET Framework 4.5で機能するようです。

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は私のプロジェクトにResourceとして埋め込まれています(パックURIに示されているように、Resourcesサブフォルダー内にあります)。

2
dotNET