0

こんにちは、ボタンのクリックなどのイベントでサウンドを再生する wpf アプリケーションがあります。そして、私が今持っている現在のコードはサウンドファイルを再生しますが、たとえばユーザーが削除すると、アプリケーションがほとんど使用できなくなる別のフォルダーにある必要があることに気付きました。アプリケーションの Release ディレクトリにまったく新しいフォルダを作成せずに .wav ファイルを取得するにはどうすればよいでしょうか。何か案は?ありがとう。

4

2 に答える 2

0

.wav ファイルがプロジェクトのルートに追加され、コンテンツとしてマークされている場合 (.wav ファイルを右クリックしてプロパティをクリックし、ビルド アクションをコンテンツに変更します)、ルート出力フォルダーに直接コピーされます。

コードまたは XAML で wav ファイルを相対パス (単純な "Myfile.wav") として参照できます。

これがあなたが求めているものだと思いますか?

于 2012-05-18T05:45:52.697 に答える
0

.wav ファイルを dll の埋め込みリソースとして配置するのはどうですか?

ファイルをプロジェクトに追加し、ファイルを右クリックしてBuild ActionEmbedded Resourceに設定するだけです。

次に、.wav ファイルをストリームとしてロードし、次のようにディスクに保存できます。

private void WriteEmbeddedResourceToFile(string writePath, string assemblyName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        Stream s = asm.GetManifestResourceStream(assemblyName);
        if (s != null)
        {
            var file = new byte[s.Length];
            s.Read(file, 0, (int)s.Length);
            File.WriteAllBytes(writePath, file);
            s.Close();
        }
    }

文字列assemblyNameは、次のように設定する必要があります。

または、ディスクへの保存をやめて、ストリームを直接使用することもできます。

private byte[] GetEmbeddedResource(string assemblyName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        Stream s = asm.GetManifestResourceStream(assemblyName);
        if (s != null)
        {
            var file = new byte[s.Length];
            s.Read(file, 0, (int)s.Length);
            s.Close();
            return file;
        }
    }

次に、ファイルをロードする場合、GetEmbeddedResource はバイト配列を返します。

于 2012-05-18T05:54:08.547 に答える