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

本文关键字:播放 媒体播放器 音频 foreach 循环 | 更新日期: 2023-09-27 18:25:40

我在Textbox中有一句话,例如,我希望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());时,它会播放,但我不想使用消息框。感谢

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

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

代替

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;

你可以把这个播放列表保存在任何你想保存的地方,我只是决定使用临时文件夹。