我对C#和马克的图书馆NAudio相当陌生。所以我试着自己学习,我想出了一个基本的音频播放器。但我有个问题。
当试图在播放器中加载大文件时,应用程序在加载整个文件时冻结2-10秒(我想)。这是我读取文件的代码:
if (target.EndsWith("mp3") || target.EndsWith("Mp3") || target.EndsWith("MP3"))
{
NAudio.Wave.WaveStream pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(target));
stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
}我真正想要的就是分部分阅读这个文件。就像缓冲区一样。从HDD读取10秒到RAM内存,然后在这10秒用完之后,读取下一个10秒,以此类推。我认为这应该可以解决我对大文件的冻结问题。
发布于 2014-01-23 20:43:59
延迟的原因是Mp3FileReader创建了一个内容表,以使它能够确定文件长度并能够更快地重新定位。您可以尝试使用MediaFoundationReader,这样会更快,但不会在Windows上工作。
发布于 2014-01-23 19:24:39
所有程序都延迟加载大文件。这取决于客户端计算机的速度。但是您可以在程序中使用backgroundWorker,并在文件加载期间在应用程序表单上显示加载动画。
在窗体上添加backgroundWorker工具
在“打开”按钮上使用此代码单击:
backgroundWorker_name.RunWorkerAsync();并将代码放到DoWork事件中。
private void backgroundWorker_name_DoWork(object sender, DoWorkEventArgs e)
{
}https://stackoverflow.com/questions/21316772
复制相似问题