2016-09-11 14 views
-1

私はDLL経由でWAVファイルを再生するいくつかのコードを持っています。それはディレクトリパスを指すことによってそれを再生していましたが、私はそれを私のEXEに含めたいと思います。だから私はそれをリソースとして入れました。問題は、どのように私はそれを正しく指していますか?私はそれを配置する必要がある場所の最初の引数がある埋め込みリソースのファイルパス?

UInt32 stream = BASS.BASS_StreamCreateFile(@"C:\MYWAVFILE.WAV", 0, 0, BASSFlag.BASS_DEFAULT | BASSFlag.BASS_SAMPLE_LOOP); 

は、あなたが見ることができます:

UInt32 stream = BASS.BASS_StreamCreateFile(Properties.Resources.MYWAVFILE, 0, 0, BASSFlag.BASS_DEFAULT | BASSFlag.BASS_SAMPLE_LOOP); 

オリジナルのコードは、これを持っていました。

重大度コード説明プロジェクトファイルの行抑制状態 エラーCS1503引数1:MYPROGRAM C「文字列」を「System.IO.UnmanagedMemoryStream」から変換することはできません:Users \ユーザー\ LOLCATS \しかし、コンパイラは、このエラーで文句を言いますドキュメント\ Visual Studio 2015 \ Projects \ MyProgram \ MyProgram \ Form1.cs 30アクティブ

ありがとうございます。

答えて

1

Properties.Resources.MYWAVFILEはパス文字列ではありません。これは、メモリに格納されているファイルの表現です。そのため、System.IO.UnmanagedMemoryStreamです。

どちらの

string形式で代わりにファイルパスの流れに取るオーバーロードされた関数を検索したり、ディスクに埋め込まれたリソースをコピーし、それを使用する:

using (var fileStream = File.Create("C:\\Path\\To\\File")) 
{ 
    Properties.Resources.MYWAVFILE.CopyTo(fileStream); 
} 
+0

私はEXE自体にそれを含めることを好むだろう。これはできますか? – t0rxe

+0

私のソリューションはうまく動作するでしょうが、埋め込みリソースがメモリにロードされ、メモリに既にロードされているにもかかわらずファイルに保存され、関数がファイルパスを読み込み、ファイルをロードしますメモリ、それは魔法です。だから、 'Stream'を受け入れるより良いライブラリを見つけることはもっと良いでしょう。[' System.Media.SoundPlayer'](https://msdn.microsoft.com/en-us/library/system.media.soundplayer)を試してみてください。 aspx)を使用する代わりに 'new SoundPlayer(Properties.Resources.MYWAVFILE)' –

関連する問題