为什么我的应用程序打开时无法在外部播放文件?

时间:2016-05-22 18:41:24

标签: c# filestream naudio filewriter

我设法将wav文件转换为mp3文件。 但是当我的应用程序运行时,它只会冻结VLC媒体播放器(坏文件描述符) 当我关闭我的应用程序时,它会发挥得很好。

public void ConvertWavToMp3(string filename)
    {
        LameMP3FileWriter mpFileWriter;
        if (File.Exists(Path.Combine(filename.Split('.').FirstOrDefault() + ".mp3"))) File.Delete(Path.Combine(filename.Split('.').FirstOrDefault() + ".mp3"));
        using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(new WaveFileReader(filename)))            
        using (mpFileWriter = new LameMP3FileWriter(File.Create(Path.Combine(filename.Split('.').FirstOrDefault() + ".mp3")), waveStream.WaveFormat, LAMEPreset.ABR_320))
        {
            byte[] bytes = new byte[waveStream.Length];
            waveStream.Position = 0;
            waveStream.Read(bytes, 0, (int)waveStream.Length);
            mpFileWriter.Write(bytes, 0, bytes.Length);
            mpFileWriter.Flush();


        }
        if (mpFileWriter != null)
        {
            mpFileWriter.Dispose();
            mpFileWriter.Close();
            mpFileWriter = null;
        }
        else Console.WriteLine("file writer was null");
        lblstatus.Text = "Ready";
        lblstatus.ForeColor = System.Drawing.Color.DarkGreen;
    }

正如您所看到的,我关闭并处理该文件,但这不起作用。 错误停留。 文件本身很好,但不允许应用程序运行或无法播放。 奇怪。 希望你能帮助我, Sincelery, TheSkilluminati PS:我不是英语母语者,所以我为文中的任何问题道歉:)

1 个答案:

答案 0 :(得分:1)

我不完全确定,但你需要关闭并处理由File.Create(Path.Combine(filename.Split('.').FirstOrDefault() + ".mp3")创建的FileStream

只需在代码中添加另一个using即可处理FileStream

string filePath = Path.Combine(filename.Split('.').FirstOrDefault() + ".mp3";

using(FileStream fs = File.Create(filePath))
using (mpFileWriter = new LameMP3FileWriter(fs), waveStream.WaveFormat, LAMEPreset.ABR_320))
{
    byte[] bytes = new byte[waveStream.Length];
    waveStream.Position = 0;
    waveStream.Read(bytes, 0, (int)waveStream.Length);
    mpFileWriter.Write(bytes, 0, bytes.Length);
    mpFileWriter.Flush();
}

如果这不起作用,我想LameMP3FileWriter实现文件处理程序出错了