2016-11-10 3 views
2

내 응용 프로그램에서 .wav 형식의 오디오 파일을 가지고 있습니다. Naudio dll, 128kbps 미만인 경우 오디오 파일의 비트 전송률을 확인하십시오. 128kbps 이상이므로 체크 비트율에 대한 코드 아래에 썼습니다. 128kbps보다 작 으면 128kbps 이상으로 변환합니다. 일부 파일의 경우.wav 형식의 오디오 파일 비트율을 변경하는 방법

int bitrate; 
using (var reader = new WaveFileReader(textBox1.Text)) 
{ 
    bitrate = reader.WaveFormat.AverageBytesPerSecond * 8; 
    reader.Dispose(); 
} 

if (bitrate < 128000) 
{ 
    using (var reader = new WaveFileReader(textBox1.Text)) 
    { 
    var newFormat = new WaveFormat(8000, 16, 1); 
     using (var conversionStream = new WaveFormatConversionStream(newFormat, reader)) 
     { 
      WaveFileWriter.CreateWaveFile(@"C:\Docs\Files\", conversionStream); 
     } 
    } 
} 

그것이 잘 작동하지만, 일부 파일을 내가 오류가 아래 얻고있다

유형 'NAudio.MmException'의 처리되지 않은 예외가 NAudio.dll 추가 정보 발생 : AcmNotPossible 호출 acmStreamOpen

여기에 스냅 오류가 있습니다. 오류 Error Snap 여기 어떻게이 문제를 해결할 수 있습니까?

답변

0

FFmpeg을 살펴 보시기 바랍니다. 그것은 내가 모든 오디오/비디오 변환 작업에 사용하는 것입니다.

많은 옵션을 사용하여 거의 모든 것을 변환 할 수있는 명령 줄 도구입니다. 원하는대로하려면 다음과 같이 실행해야합니다.

$ ffmpeg -i input.wav -ab 128 output.wav 

위의 행에서 파일을 128 비트 전송률로 변환합니다. 코드에서 이것을 사용하는

가장 쉬운 방법은 프로젝트의는 FFmpeg 실행 파일을 포함 (또는 환경 변수로 전 세계적으로 설치)와 같은과 직접 호출하는 것입니다

Process process = new Process(); 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.RedirectStandardError = true; 
process.StartInfo.FileName = "ffmpeg"; 

process.StartInfo.Arguments = $"-i \"{originalFile}\" -ab 128 \"{outputPath}\""; 

process.StartInfo.UseShellExecute = false; 
process.StartInfo.CreateNoWindow = false; 
process.Start(); 
process.WaitForExit(); 

더 우아한 해결책이 있습니다 - FFmpeg 주위 래퍼 -하지만이 트릭을해야합니다.

+1

안녕하세요 @ stoyan-berov, ffmpeg는 멋지지만 ffmpeg는 requirment에는 적합하지 않습니다. 여기서는 웹 애플리케이션이 있습니다. 그래서 나는 프로그래밍 방식으로 변환하려고합니다. stoyan-berov 고맙습니다. –

+0

안녕하세요, 저는 웹 애플리케이션 인 .NET MVC 프로젝트에 FFmpeg를 사용했습니다. 위의 코드 (또는 유사)를 사용하면 프로그래밍 방식으로 만 변환을 수행합니다. 사용자는 콘솔을 볼 수 없습니다. –

+0

ok @ stoyan-berov. . 내가 시도해. –

0

WaveFormatConversionStream은 요청 된 변환을 수행 할 수있는 ACM 코덱을 찾습니다. 모든 변형이 가능하지는 않습니다. 예를 들어 일반적으로 한 번에 샘플 속도, 비트 심도 및 채널 수를 변경할 수 없습니다. 따라서 가능한 변환은 들어오는 오디오의 정확한 WaveFormat에 달려 있습니다. 한 단계에서 다운 샘플링하고 다른 스테레오에서 스테레오로 이동해야 할 수도 있습니다. MediaFoundationResampler은보다 유연하며 한 단계로 처리 할 수 ​​있습니다.

관련 문제