2013-05-23 8 views
0

NAudio를 WAV 파일로 사용하여 오디오 녹음을 구현하려고 시도했지만 WasapiLoopbackCapture 클래스로 설정된 기본 비트 전송률을 프로그래밍 방식으로 변경할 수 없습니다.NAudio - 녹음 된 WAV 파일의 비트 전송률 변경

오디오 출력을 MemoryStream에 녹음합니다 (아래의 snippet에서 녹음 스트림). 그러나 WasapiLoobpackCapture가 설정 한 기본 비트 전송률은 내 필요에 맞지 않습니다.

나는 320KBPS의 비트 전송률을 갖고 싶습니다. WaveformatConversionStream 클래스를 사용하여 프로그래밍 방식으로 기록 된 파일을 변환하려고했지만 작동하지 못했습니다.

WaveFormat targetFormat = WaveFormat.CreateCustomFormat(waveIn.WaveFormat.Encoding, 
                   waveIn.WaveFormat.SampleRate, //SampleRate 
                   waveIn.WaveFormat.Channels,  //Channels 
                   320000, //Average Bytes per Second 
                   waveIn.WaveFormat.BlockAlign,  //Block Align 
                   waveIn.WaveFormat.BitsPerSample); //Bits per Sample 


     using (WaveStream inputStream = new RawSourceWaveStream(recordedStream, waveIn.WaveFormat)) 
     { 
      try 
      { 
       using (var converter = new WaveFormatConversionStream(targetFormat, inputStream)) 
       { 
        // ... 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 

      recordedStream.Dispose(); 
     } 

"AcmNotPossible calling acmStreamOpen"변환 예외가 항상 발생합니다. 보시다시피, 나는 목표 WAV에서 더 낮은 비트 전송률을 제외하고는 기록 된 WAV 파일 (확장 인코딩, 44100 등)과 정확히 동일한 형식을 사용하고 있습니다.

MemoryStream에 포함 된 Wav 파일에서 비트율 변환을 수행하는 올바른 코드는 무엇입니까? 내 목표는 320KBPS 파일을 얻는 것입니다.

답변

1

주어진 샘플 속도, 비트 심도 및 채널 수에 대해 PCM 오디오는 항상 동일한 비트 전송률을가집니다 (이 세 값을 곱하여 계산). 비트 전송률을 줄이려면 이러한 세 가지 중 하나를 변경해야합니다 (스테레오에서 모노로 이동하지 않는 한 샘플 속도를 낮추는 것이 가장 좋은 방법 일 수 있습니다).

정말로 MP3, WMA 또는 AAC와 같은 형식으로 인코딩해야 원하는 비트 전송률을 선택할 수 있습니다.

+0

audioClient.MixFormat의 채널 수는 4이고 비트 심도는 32이며 샘플 속도는 44100입니다. 비트 심도를 16으로, 채널 수를 2로 변경할 수있는 코드를 표시 할 수 있습니까? –

+1

4 채널 오디오는 아주 드문 경우입니다. 필요하지 않은 경우 두 개의 채널을 삭제하거나 왼쪽 또는 오른쪽 채널 중 하나에 혼합하십시오. 나는 [기사] (http://www.codeproject.com/Articles/501521/How-to-convert-between-most-audio-formats-in-NET)을 작성했다.이 기사에서는 비트 깊이를 채널 수를보다 자세히 설명합니다. –

+0

StereoToMono 함수와 비슷한 코드를 사용하여 두 개의 채널을 버리려고했지만 좋은 오디오 출력을 얻을 수 없었습니다. 실제로 4 채널에서 2 채널로 전환하는 코드 스 니펫을 표시 할 수 있습니까? –

관련 문제