2016-05-22 8 views
1

Мне удалось преобразовать wav-файл в mp3-файл. Но пока мое приложение работает, оно только замораживает VLC Media Player (дескриптор Bad File) Когда я закрываю приложение, он будет играть нормально.Почему я не могу играть в файл извне, пока мое приложение открыто?

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

Я не совсем уверен, но вы должны закрыть и распоряжаться FileStream создать по File.Create(Path.Combine(filename.Split('.').FirstOrDefault() + ".mp3")

просто добавить еще один 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 реализация делает что-то не так с файловым обработчиком

+0

Где я должен его закрыть и утилизировать? Ive уже пытался использовать() {} вещь. – TheSkilluminati

+0

Я добавил еще один пример() к вашему примеру кода, скажите, если это сработало – greenberet

+0

О, спасибо, отлично работал. Ницца :) – TheSkilluminati