所以,我在C#中使用mp3播放器,但我遇到了问题。 我想从列表中的目录中获取所有文件,因此您可以选择 你要播放的歌曲。
这是获取文件的代码↓
string[] music = Directory.GetFiles(dir, "*.mp3");
并播放↓
WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = String.Join(" ", music);
wplayer.controls.play();
如果文件夹中只有一个文件,则可以正常工作,但只要文件夹中有多个文件,它就无法正常工作......
所以我认为解决方案是将所有文件设置在列表中,使其从0开始,然后结束,直到没有歌曲为止。然后它重新开始。
但是,我该怎么做?
提前致谢!
答案 0 :(得分:2)
您已经获得了所需的所有文件:
function replaceTags($content, $newImages)
{
$dom = new DOMDocument();
$dom->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$images = $dom->getElementsByTagName('img');
for ($i = 0; $i < $images->length; $i++)
{
$dom2 = new DOMDocument();
$dom2->loadHTML($newImages[$i]);
$newImg = $dom2->getElementsByTagName('img')
->item(0);
$images->item($i)->setAttribute('src', $newImg->getAttribute('src'));
}
return $dom->saveHTML();
}
string[] music = Directory.GetFiles(dir, "*.mp3");
返回文件夹中的所有文件,搜索模式为GetFiles
,它会返回所有MP3文件。
问题是,您不需要为文件执行*mp3
,而是逐个播放它们:
string.Join
当您的文件夹中只有一个MP3文件时,您当前逻辑仅起作用的原因是由于您使用的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
}
。
为了说明这是string.Join
当您有多个文件时string.Join
在music
中执行的操作。假设您的music
包含:
C:\music1.mp3
C:\music2.mp3
当您执行string.Join
时,您的网址会变为:
C:\music1.mp3 C:\music2.mp3
因此你无法播放音乐。但是当您只有一个文件时,字符串连接不会影响:
C:\music1.mp3
答案 1 :(得分: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;