2015-12-04 80 views
0

我在文本框中有一個句子,我想讓MediaPlayer從文件夾中讀取它。要做到這一點,我已經寫了一些代碼來獲取該句子組成的每個單詞。現在我想播放它的音頻。但我做不到。 MediaPlayer只播放最後一個。我認爲這是因爲阻止MediaPlayer在每個循環中播放或非常快速地播放。我該如何暫停播放,然後讓循環再次繼續(不使用定時器)?如何使用媒體播放器在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"); 
        // MessageBox.Show(word.TrimEnd()); 
       word = null; 
       } 

      } 

當我取消註釋// MessageBox.Show(word.TrimEnd());它播放,但我不想使用一個消息框。謝謝

回答

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; 

您可以保存此播放列表,無論你想,我只是決定使用臨時文件夾。

+0

我在窗體上有一個'axWindowsMediaPlayer1'工具箱,它必須播放一個文件夾中的每個單詞,其名稱與每個已被分割的單詞相同。 (當我使用'xWindowsMediaPlayer1.URL =(「.../folderName /」+ word +「.mp3」);'xWindowsMediaPlayer1'播放該路徑中的單詞,但我不知道該怎麼做這個詞是因爲我可以自己播放每個單詞,當我使用循環時,它只是播放最後一個單詞 – user1605859

+0

@ user1605859我知道這就是爲什麼我告訴你如何使用播放列表:) –

+0

但是在代碼中有一些錯誤。也許我對這個URL感到困惑。 – user1605859

相關問題