如何使用NAudio读取部分文件?

时间:2014-01-23 18:45:12

标签: c# buffer naudio

我是C#和Mark的图书馆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到RAM内存读取10秒,然后在这10秒后用完,读取接下来的10秒,依此类推。我认为这应解决我对大文件的冻结问题。

2 个答案:

答案 0 :(得分:0)

所有程序都有延迟加载大文件。这取决于客户端计算机的速度。 但您可以在程序中使用backgroundWorker,并在加载文件时在应用程序表单上显示加载动画。

在表单上添加backgroundWorker工具

在点击打开按钮时使用此代码:

backgroundWorker_name.RunWorkerAsync();

并将您的代码放入DoWork事件

private void backgroundWorker_name_DoWork(object sender, DoWorkEventArgs e)
{
}

答案 1 :(得分:0)

延迟的原因是Mp3FileReader创建了一个目录,以允许它确定文件长度并启用更快的重新定位。您可以尝试使用MediaFoundationReader而不是更快,但不适用于Windows XP。