2017-03-29 1 views
0

LAME에 NAudio 래퍼를 사용하여 wav 파일을 mp3로 변환하고 있습니다. 그러나 NAudio를 사용하여 내 mp3를 wav로 다시 변환하면 wav 파일은 원래 wav 파일보다 약간 큽니다. 원래와 디코딩 된 wav 파일이 정확히 같은 크기가되도록 내가 얻을 수있는 방법이 있습니까? 이외에도 다른 모든 것들이 작동하며 나는 문제없이 wav와 mp3 파일을 재생할 수 있습니다. 감사합니다. 아래에 변환 기능을 포함 시켰습니다.wav를 mp3로 변환하고 wav로 되 돌아 오기

private void ConvertWavMP3(string wavFile) 
    { 
     try 
     { 
      using (var wavRdr = new WaveFileReader(wavFile)) 
      using (var mp3Writer = new LameMP3FileWriter(wavFile.Replace(".wav", ".mp3"), wavRdr.WaveFormat, 128)) 
      { 
       wavRdr.CopyTo(mp3Writer); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error converting wav to mp3.", "CONVERSION ERROR"); 
     } 
    } 

    private static void ConvertMp3ToWav(string mp3File) 
    { 
     try 
     { 
      using (Mp3FileReader reader = new Mp3FileReader(mp3File)) 
      { 
       //using (WaveStream pcmStream = new WaveFormatConversionStream(new WaveFormat(8000, 16, 1), reader)) 
       using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(reader)) 
       { 
        WaveFileWriter.CreateWaveFile(mp3File.Replace(".mp3", ".wav"), pcmStream); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error converting mp3 to wav.", "CONVERSION ERROR"); 
     } 
    } 
+0

WAV는 원시 형식이므로 정확하게 동일하지 않을 수 있지만 가까이 있어야합니다. 원본 및 출력 비트 전송률/채널/등을 비교하여 변환 중에 무언가가 변경되지 않도록하십시오. –

+0

예, 모든 waveformat 설정은 2에서 동일합니다. File.ReadAllBytes를 수행하면 출력 wav 파일 바이트 배열이 원본보다 훨씬 큽니다. 그래서 mp3 변환은 원본 WAV 녹음에 추가 샘플을 추가했습니다. –

+0

원본이 압축 된 형식이 아닌 경우 입력 및 출력 설정이 동일하면 overal 파일 크기가 동일해야합니다 (bitrate = bitsPerSample * samplesPerSecond * channels). –

답변

0

MP3는 손실 코덱이므로 인코딩 된 것과 동일한 오디오로 압축을 풀지 않습니다. 또한 고정 된 길이를 가진 일련의 인코딩 된 "프레임"을 생성하여 작동하므로 디코딩 된 MP3는 일반적으로 입력과 정확히 동일한 지속 시간이 아니라 몇 밀리 초 더 길어집니다.

관련 문제