본문 바로가기
개발이야기

펌웨어로 2개의 wav 오디오 믹싱하기

by 코저씨 2022. 3. 21.
728x90

wav파일은 header구조이 있는 원본 음원 파일이다. header가 없으면 pcm 데이터이다.

 

오디오 음원 데이터는 여러 가지 타입이 있다.

단순 채널인 모노채널과 좌우 음원으로 구성된 2 채널이 있고 더 나아가서는 5.1 채널 등 여러 가지 타입이 있다. 

 

Bit per Sample은 샘플링한 데이터의 데이터 비트 수 인데 보통 16비트를 사용한다. (MP3 압축 데이터를 디코딩하면

16비트 PCM데이터로 나온다). 그리고 16비트 샘플 데이터는 -32,768 ~ 32,767 사이의 음원의 아날로그 값에 대한 디지털 값이다. 이 값을 단순히 키우면 볼륨이 커지고 낮추면 볼륨이 낮아진다. 

 

그리고 2개의 오디오를 합쳐서,믹싱해서 출력을 하려면 각 샘플데이터를 더한 다음 wav로 저장하거나, I2S로 출력하면 된다.

다만 이렇게 하면 음원이 그대로 더해지면서 노이즈처럼 튀는 음원이 있게 된다. 

 

이런 경우, 아래의 예제 처럼 일정 크기(0.5)가 넘으면 더하고 그 이하이면 크기가 낮은 음원으로 사용하는 방법을 적용해도 된다.

https://www.codeproject.com/Articles/29676/CWave-A-Simple-C-Class-to-Manipulate-WAV-Files

 

하지만 내 경우는 음악이 출력되는 중, 음악소리를 줄이고 안내 음원을 출력하는 케이스였기에 안내 음원을 그대로 출력하고,

출력되는 음악의 샘플 데이터를 0.2배하여 그대로 더해서 출력해주니 노이즈도 튀지 않고 적당하게 출력이 되었다.

 

다만 페이드 인아웃을 펌웨어로 구현해야 하는데.. 타이머를 통해 구현할 예정이다.

 

728x90