簡體   English   中英

C#使用資源中的NAudio播放MP3文件

[英]C# Play MP3 file using NAudio from Resource

我有一個Windows窗體應用程序,我試圖使用NAudio庫從資源中簡單地播放MP3文件。

我相信需要做的是以某種方式流式傳輸文件,這是一個NAudio的例子,不幸的是它接受文件路徑字符串作為參數。

private WaveStream CreateInputStream(string fileName)
{
    WaveChannel32 inputStream;
    if (fileName.EndsWith(".mp3"))
    {
        WaveStream mp3Reader = new Mp3FileReader(fileName);
        inputStream = new WaveChannel32(mp3Reader);
    }
    else
    {
        throw new InvalidOperationException("Unsupported extension");
    }
    volumeStream = inputStream;
    return volumeStream;
}

要播放文件:

waveOutDevice = new WaveOut();
mainOutputStream = CreateInputStream("C:\\song.mp3");

與普通文件一起正常工作,我將如何處理位於參考資料中的文件? 謝謝。

Mp3FileReader類可以從文件名或System.IO.Stream構造。 所以你需要的是將MP3資源作為流讀取。 如何執行此操作取決於您添加資源的方式。

可以通過Properties.Resources對象訪問使用Properties/Resources.resx文件添加的Properties/Resources.resx (通過應用程序屬性對話框管理)。 已知的資源類型(圖像等)應該由它們適當的類型表示,但MP3文件作為byte[]來訪問。 您可以從資源創建一個MemoryStream ,並使用它來構造Mp3FileReader如下所示:

MemoryStream mp3file = new MemoryStream(Properties.Resources.MP3file);
Mp3FileReader mp3reader = new Mp3FileReader(mp3file);

其他資源方法在獲取流的細節方面有所不同,但除此之外基本相同。 如果使用Embedded Resource構建操作將MP3文件添加到項目中,則可以使用以下命令:

public Stream GetResourceStream(string filename)
{
    Assembly asm = Assembly.GetExecutingAssembly();
    string resname = asm.GetName().Name + "." + filename;
    return asm.GetManifestResourceStream(resname);
}

...
Stream mp3file = GetResourceStream("some file.mp3");
Mp3FileReader mp3reader = new Mp3FileReader(mp3file);

WPF資源再次不同,使用pack:... uri格式和Application.GetResourceStream

在所有情況下,您應該在閱讀完之后處理Stream。

使用http://media.io/將其轉換為.wav,然后您需要做的就是

(new System.Media.SoundPlayer(ProjectName.Properties.Resources.wavfilename)).Play();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM