如何从C#

时间:2016-03-20 02:43:37

标签: c# windows

所以,我在C#中使用mp3播放器,但我遇到了问题。 我想从列表中的目录中获取所有文件,因此您可以选择 你要播放的歌曲。

这是获取文件的代码↓

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

并播放↓

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

如果文件夹中只有一个文件,则可以正常工作,但只要文件夹中有多个文件,它就无法正常工作......

所以我认为解决方案是将所有文件设置在列表中,使其从0开始,然后结束,直到没有歌曲为止。然后它重新开始。

但是,我该怎么做?

提前致谢!

2 个答案:

答案 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.Joinmusic中执行的操作。假设您的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;