2009-05-18 4 views
2

두 개의 오디오 파일을 혼합해야합니다. 오디오 1은 정적 파일이며 오디오 2에 "태그 지정"하는 데 사용됩니다. 명확히 말하면 ID3 태그가 아닌 오디오 태그에 대해 말하고 있습니다.C#에서 두 개의 오디오 파일을 레이어하는 방법은 무엇입니까?

내 머리를 감쌀 수없는 두 가지 기본적인 문제가 있습니다.

1) 결과를 오디오 2와 길이가 같도록하려면 오디오 2와 혼합 할 때 어떻게 오디오 1을 반복 할 수 있습니까?

2) 오디오 2는 MP3이므로 다시 인코딩하지 않고 품질을 떨어 뜨릴 수 있습니다.

C#에서이 작업을 수행하는 방법에 대한 모든 라이브러리 또는 아이디어를 보내 주시면 감사하겠습니다.

답변

2

mp3를 웨이브 형식으로 디코딩하고 믹싱을 수행 한 다음 다시 mp3 형식으로 인코딩해야합니다.

누군가가 일부 mp3 라이브러리를 가리켜 야합니다. 나는 실제 믹싱을 통해 당신을 도울 수 있습니다.

실제로 어떻게 작동하는지는 멋집니다. 사운드 파일은 특정 간격으로 기록 된 진폭 샘플의 무리입니다. 이것은, 예를 들어, 사운드 수 :

0, 12, 128, 14, -1, -13은 -128은 -64가 -32

좋아, 그것은 정말 짧은 소리, 그러나 정지 나랑. ,

10, -12, -100, -150, -75, -25, -12 -0

이, 우리 단지 멋진 부분이다 : 나는이 소리와 함께 위의 사운드를 믹스하고 싶은 말은 2 개 개의 배열을 함께 추가

10, 0, 28, -136, -76 ...

0 + 10 = 10 + 12 -12 = 0 + 128 = -100 28 ..

정말주의해야 할 유일한 사실은 사실입니다. 웨이브 파일에 저장할 수있는 진폭의 한계. 요즘은 16 비트이지만 8 비트 웨이브 파일을 만들 수 있습니다. 진폭이 웨이브 파일의 한계를 초과하면 최대한 높게 또는 낮게 가야합니다.

어쨌든, 그것의 jist입니다. 더 세밀한 포인트는 해결되어야합니다.

+1

다른 비트 심도의 오디오 파일을 레이어 할 때 고려해야 할 다른 사항은 다음과 같습니다. 8 비트 파일을 16 비트 파일과 혼합하려고하면 16 비트 파일의 정밀도가 높아집니다. 추가하기 전에 8 비트 파일 또는 16 비트 파일의 크기를 조정해야합니다. – jrista

+0

사실. 이것은 나를 떠올리게한다. 오디오 믹싱의 또 다른 요소는 볼륨입니다. 믹스 할 때마다 기본적으로 음량이 추가됩니다. 웨이브 볼륨이 극대화되면 (음악이 자주 나오는 경우) 원래 샘플을 루프하여 최고/최저 피크를 찾은 다음 혼합 오디오를이 피크로 정규화해야합니다. 즉, 두 개의 정말 큰 (?) 사운드 샘플을 믹스 할 때 많은 피크를 잘라 내지 않도록 중간 범위의 데이터 유형 (예 : 32 비트 정수)을 사용할 수 있습니다. 표준화 후 사운드를 16/8 비트 형식으로 다시 저장할 수 있습니다. –

4

NAudio을 사용하면이 작업을 수행 할 수 있습니다. WaveFileReader 클래스를 사용하여 각 파일에서 읽을 수있는 WaveStream을 만드십시오. (MP3를 PCM으로 먼저 변환해야합니다. NAudio 데모 코드에서 Mp3FileReader를 사용하십시오.) 그런 다음 원형 (즉, 소스 데이터의 끝에 도달하면 처음으로 돌아가는 Read 메서드)에서 순환되는 파생 된 WaveStream을 만듭니다.

그런 다음 WaveMixerStream32를 사용하여 함께 섞습니다. (먼저 32 비트로 변환해야합니다 -이를 위해 WaveChannel32를 사용하십시오). 이 클래스를 사용하여 각 파일의 볼륨 레벨을 설정할 수도 있습니다. 마지막으로 Wave32To16Stream을 사용하여 다시 16 비트로 변환 한 다음 WaveFileWriter를 사용하여 최종 파일을 만듭니다. 그런 다음 LAME을 사용하여 MP3로 변환하십시오.

+0

WaveChannel32에서 "오프셋 및 길이가 배열의 범위를 벗어났습니다. 또는 사용하려고 할 때마다 인덱스가 소스 컬렉션의 끝에 이르는 요소 수보다 큽니다"라는 오류 메시지가 나타납니다. 어떤 아이디어? (http://naudio.codeplex.com/Thread/View.aspx?ThreadId=79458에 대한 자세한 정보) – Pablo

+0

안녕하세요, 예를 들어 설명해주십시오 .i Naudio의 새로운 기능 감사합니다. –

0

나는 BASS 라이브러리를 제안합니다. 그것은 "믹싱"뿐만 아니라 다양한 포맷을 재생할 수 있으며 EQ/페이드/컴프레서와 같은 DSP도 재생할 수 있습니다.http://un4seen.com/bass.html

관련 문제