19

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

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

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

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

4

4 に答える 4

11

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

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

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

.NET Framework 4.0、VS2012 を使用。

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

編集

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

Extensible Application Markup Language (XAML) でこのクラスのインスタンスを宣言できますが、コードを使用せずにそのメディアを読み込んで再生することはできません。XAML のみでメディアを再生するには、MediaElement を使用します。また、XAML でインスタンスを宣言する場合、唯一の実用的な用途は、Player プロパティのプロパティ要素構文を埋めることです。

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

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

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

于 2013-02-28T22:48:05.900 に答える
0

これも機能しているようで、パックやアセンブリの長い行よりも覚えやすいかもしれません.. Resources.resx を開き、aa_pickup.wav という名前のサウンドファイルをそこにドラッグしてから、そのプロパティを [出力ディレクトリにコピー] に設定します。 = 常にコピー。

System.IO.Stream str = Properties.Resources.aa_pickup;
System.Media.SoundPlayer snd = new System.Media.SoundPlayer(str);
snd.Play();

今..私がボリュームを変更する方法だけを解決できれば.

于 2021-07-21T15:23:37.947 に答える