如何在foreach循环中使用媒体播放器播放一些音频?

时间:2015-12-04 06:51:16

标签: c# for-loop

我在文本框中有一个句子,我想让MediaPlayer从文件夹中读取它。为此,我编写了一些代码来获取句子所包含的每个单词。现在我想播放它的音频。但我不能这样做。 MediaPlayer只播放最后一个。我认为这是因为阻止MediaPlayer在每个循环中播放或者非常快速地进行。如何在其中暂停播放然后再次允许循环(不使用计时器)?

string vocab = textBox2.Text.ToLower() + " ";
            string word = null;
            foreach (char c in vocab)
            {
                word += c;
                if (c == ' ')
                {

                    axWindowsMediaPlayer1.URL = ("some url parts for example" + word.TrimEnd() + ".mp3");
                   // MessageBox.Show(word.TrimEnd());
                 word = null;
                }

            }

当我取消注释它播放的// MessageBox.Show(word.TrimEnd());但我不想使用消息框时。感谢

1 个答案:

答案 0 :(得分:0)

首先,您不需要手动收集所有这些文件名。

而不是

string vocab = textBox2.Text.ToLower() + " ";
string word = null;
foreach (char c in vocab)
{
   word += c;
   if (c == ' ')
   {
       axWindowsMediaPlayer1.URL = ("some url parts for example" + word.TrimEnd() + ".mp3");
       word = null;
   }
}

你可以这样做:

string[] fileNames = textBox2.Text
  .ToLower().Split(" ").Select(word => String.Format("C:\some url parts for example\{0}.mp3", word.Trim());

它接受句子,将其转换为小写,通过空格分割成一个单词数组。然后,修剪每个单词并将其转换为mp3文件的路径。

如何播放音频文件,您可以将字符串转换为文件列表,将其创建为播放列表并使用播放器播放:

string tempPlaylistFilename = Path.Combine(Path.GetTempPath(), "TemporaryPlaylist.m3u");

string[] fileNames = textBox2.Text
                       .ToLower()
                       .Split(" ")
                       .Select(word => String.Format("C:\some url parts for example\{0}.mp3", word.Trim());

File.WriteAllLines(fileNames)

axWindowsMediaPlayer1.URL = tempPlaylistFilename;

您可以将此播放列表保存在任何地方,我只是决定使用临时文件夹。