2016-03-20 23 views
1

私はC#のmp3プレーヤーで作業していますが、問題に直面しています。 リスト内のディレクトリからすべてのファイルを取得したいので、再生する曲番号 を選択できます。 C#のディレクトリからファイルのリストを取得するには

この

は、取得するためのコードであるファイル↓

string[] music = Directory.GetFiles(dir, "*.mp3"); 

し、それを再生する↓

WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); 
wplayer.URL = String.Join(" ", music); 
wplayer.controls.play(); 

フォルダ内のファイルは1つだけだが、とすぐに複数のファイルがある場合、これは動作しますそれはうまくいきません...

私は解決策がリストにすべてのファイルを設定することだと思うので、0から始まり、終了します。それはもう一度始まります。

しかし、どうすればいいですか?

ありがとうございます!あなたは既ににより、必要なすべてのファイルを取得

答えて

2

:フォルダ内と*mp3として、検索パターンを持つすべてのファイル

string[] music = Directory.GetFiles(dir, "*.mp3"); 

GetFilesリターン、それはすでに、すべてのMP3ファイルを返します。

事がある、あなたはファイルに対してstring.Joinを行う必要がありますが、それらを一つずつ再生されない:

foreach (var musicurl in music){ 
    WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); 
    wplayer.URL = musicurl; //get one by one 
    wplayer.controls.play(); 
    //Logic to control how long a music is to be played 
} 

あなたは正確に1つのMP3ファイルを持っている場合、あなたの現在のロジックのみ機能する理由をフォルダは、あなたが使用しているstring.Joinのためです。

これは、複数のファイルがある場合にmusicにあるstring.Joinの処理方法を示しています。

C:\music1.mp3 
C:\music2.mp3 

あなたがstring.Joinを行うと、あなたのURLは次のようになります:

C:\music1.mp3 C:\music2.mp3 

したがって、あなたが音楽を再生することはできませんあなたのmusicがで構成されているとします。しかし、ファイルを1つだけ持っている場合、文字列が参加することは影響しません:そのような迅速な応答のための

C:\music1.mp3 
+0

感謝を!しかし、それは一緒にすべての曲を演奏します.... –

+0

@LuukWuijster私は次のように書いています: '/ /音楽を再生する時間を制御するロジック'あなたは次の曲を選択する方法を制御するために何かを加えなければなりません。 – Ian

+0

ああ、そうだよ。しかし、私が考えることができる(そして私がやったこと)唯一のことは、トラックの時間を取得し、次にタスクを待つことです。Delay(TimeOfTrack); これを行うより効率的な方法はありませんか? –

0
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); 
WMPLib.IWMPPlaylist playlist = wplayer.playlistCollection.newPlaylist("playlist"); 

string[] music = Directory.GetFiles(dir, "*.mp3"); 

foreach (string file in music) 
{ 
    WMPLib.IWMPMedia media = wplayer.newMedia(file); 
    playlist.appendItem(media); 
} 

wplayer.currentPlaylist = playlist; 
関連する問題