[英]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.