2017-02-10 11 views
2

こんにちは私はC#で新しく、私はmp3ファイルを再生するために必要な小さなゲームをやっています。c#、mp3とファイルパス

私はこのように、これについて検索し、それを行うにはWMPを使用してきた:

WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
    myplayer.URL = @"c:\somefolder\project\music.mp3"; 
    myplayer.controls.play(); 

私はmp3ファイルのフルパスとファイルを正常に再生できています。問題は、プロジェクトフォルダからファイルを直接使用する方法が見つからないということです。プロジェクトを別のコンピュータにコピーすると、mp3ファイルのパスが無効になり、サウンドは再生されません。私は今や死んでいると感じています。誰かが私を助けることができたら、私はそれを感謝します!事前に感謝

答えて

0

使用するための別の簡単なオプションは、次のようになります。

WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
string mp3FileName = "music.mp3"; 
myplayer.URL = AppDomain.CurrentDomain.BaseDirectory + mp3FileName; 
myplayer.controls.play(); 

これはあなたの実行ファイルが置かれているディレクトリからMP3を再生します何の反射が必要とされていないことに注意することも重要であり、その不必要なパフォーマンスコストを追加する可能性があります。それが追加された後、次のコードを実装することができ、資源としてMP3を埋め込むについてコメントをフォローアップとして

Assembly assembly = Assembly.GetExecutingAssembly(); 
string tmpMP3 = AppDomain.CurrentDomain.BaseDirectory + "temp.mp3"; 
using (Stream stream = assembly.GetManifestResourceStream("YourAssemblyName.music.mp3")) 
using (Stream tmp = new FileStream(tmpMP3, FileMode.Create)) 
{ 
    byte[] buffer = new byte[32 * 1024]; 
    int read; 

    while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     // Creates a temporary MP3 file in the executable directory 
     tmp.Write(buffer, 0, read); 
    } 
} 
WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
myplayer.URL = tmpMP3; 
myplayer.controls.play(); 
// Checks the state of the player, and sends the temp file path for deletion 
myplayer.PlayStateChange += (NewState) => 
{ 
    Myplayer_PlayStateChange(NewState, tmpMP3); 
}; 

private static void Myplayer_PlayStateChange(int NewState, string tmpMP3) 
{ 
    if (NewState == (int)WMPPlayState.wmppsMediaEnded) 
    { 
     // Deletes the temp MP3 file 
     File.Delete(tmpMP3); 
    } 
} 
+0

もう一度やり直していただきありがとうございます!ちなみに、私はそのファイルがexeファイルに埋め込まれていることがわかりましたか?プロパティ/ビルドアクション - 埋め込みリソースについて私が正しければ、どうすればそれをmyplayerに呼び出すことができますか.URL? – ERS

+0

これを達成する方法については、私の編集をご覧ください。 –

+0

もう一度、ありがとう! – ERS

0

MP3ファイルをプロジェクトに追加します。また、常に出力フォルダにコピーするようにフラグを立てます。ここでは、それを行う方法のチュートリアルがあります(How to include other files to the output directory in C# upon build?)。

using System.Windows.Forms; 

そして、あなたは次のように使用することができます:あなたが使用する必要が

:次に、あなたがこの方法を参照することができます。これは、すべてのマシンのために働く必要があり

WindowsMediaPlayer myplayer = new WindowsMediaPlayer(); 
myplayer.URL = Application.StartupPath + "\music.mp3"; 
myplayer.controls.play(); 
+0

こんにちは、ちょうどこの「\のような1つの以上のバックスラッシュを追加する必要がありました\ music.mp3 "となり、今は魅力的です!ありがとうございます! – ERS

+0

あなたはそれを持っています。それが助けられたら、答えとしてマークしupvoteを忘れないでください。 :) – NicoRiff

+0

私の評判が15未満であるため、公に表示されません。 – ERS

0

、あなたのmp3 & exeファイルを提供しました同じフォルダにあります。

string mp3Path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + mp3filename 
+0

こんにちは、ちょうどあなたの方法をテストし、それも働いて、あなたの助けに感謝! – ERS

関連する問題