Audio Processing

오디오 필터 실험(15)-원시 데이터 얻기

gigasound 2021. 10. 29. 16:48


오디오 필터 실험

여러 글에서 디지털 필터의 계수를 구하는 방법을 알아봤습니다. 이 중에서 피킹 필터저역 통과 필터를 실제 오디오 신호에 적용해서 기록하는 과정을 몇 개의 글에 나눠서 설명하겠습니다.

그중에서 첫 번째 내용으로 오디오 파일을 읽고, 다른 형식으로 데이터를 추출하고, 오디오 파일을 재생하는 프로그램의 사용 방법을 먼저 다뤄보겠습니다.


OcenAudio의 설치

오디오 재생 프로그램으로 유명한 프로그램으로 알송, zaudio, fooba2000등이 있고, 오디오 편집과 효과 추가가 가능한 프로그램으로 audition, goldwave등과 프로용으로는 cubase, potool, logic 등이 있습니다. 편집이 가능한 오디오용 프로그램은 대부분 유료입니다.

ocenaudio는 무료이면서, 사용도 편리하고 기능도 신호처리에 활용하기에 충분합니다. 다음의 홈페이지에서 구해서 설치하면 됩니다.

ocenaudio를 실행하고 왼쪽의 열린 파일 부분이 드래그로 오디오 파일을 가져다 놓으면 아래 그림과 같이 오디오 파일의 웨이브 모양이 나옵니다. 오디오를 재생하면 레벨 미터도 보입니다. 오디오 신호처리 후에 결과를 보거나 듣기에 충분합니다. 


원시 데이터 얻기

오디오 파일은 파일의 형식에 따라 내부에 포함된 오디오 데이터의 형식이 다릅니다. *.wav 등의 대부분의 파일들은 정수형 오디오 데이터와 파일의 정보를 포함하고 있기 때문에, 신호처리를 위해 직접 사용하지 못하고 데이터를 추출해서 실수 값으로 모두 변경해 줘야 합니다. 

물론 wav를 신호처리 대상으로 한다면, windows의 winmm 리눅스의 alsa 등을 활용하면 됩니다. 그래도 내부 데이터는 대부분 정수형입니다. 

좀 더 편리하게 오디오 파일에서 실수형 데이터만 추출하고 신호 처리를 한 후에 이를 다시 실수형 데이터로 오디오 재생을 하면 좋겠습니다. 이런 데이터를 원시 데이터(raw data)라고 합니다.

ocenaudio은 이런 기능을 모두 수행해 주는 기능이 포함되어 있습니다. 

  • 위의 그림과 같이 oceanaudio에 파일 하나를 불러오고 선택합니다. 여러 개의 파일을 불러올 수 있기 때문에 화면에서 선택해야 합니다. 
  • 그리고 파일 -> '..로 저장하기'기를 누른다음 확장자를 Text IEEE Float로 선택하고 원하는 파일 이름으로 기록합니다. 이 글에서는 test로 파일을 선택했습니다. 그러면 text.flt로 기록됩니다.
  • test.wav 파일을 모노(mono) 파일로 기록된 내용의 일부는 다음과 같습니다. 모두 $\pm 1$로 정규화된 실수 값으로 된 오디오 신호입니다. 이 원시 데이터를 신호처리용으로 사용하기에 매우 적합합니다. 
0.010131835937500	
0.013153076171875	
0.008087158203125	
0.004394531250000	
0.001007080078125	
-0.012207031250000	
-0.008026123046875	
0.001159667968750	
-0.000091552734375	
0.010314941406250	
0.005493164062500	
0.000244140625000	
-0.000091552734375	
0.000091552734375	
0.012695312500000	
0.012207031250000	
0.016906738281250	
0.019042968750000	
0.015655517578125	
0.021057128906250	
0.007263183593750	
0.016510009765625	
0.014770507812500	
-0.002716064453125

오디오 원시 데이터의 재생

신호 처리 결과를 청취하려면 원시 데이터를 다시 *.wav 등으로 기록해야 합니다. 굳이 기록이 목적이 아니고 신호처리 과정을 검토하기 위한다면 원시 데이터를 그냥 듣거나 그래프로 보는 것이 좋겠습니다.

ocenaudio는 원시 데이터의 추출 뿐만이 아니라 재생도 가능합니다. 

  •  아래의 그림과 같이 생성된 원시 데이터 파일을 외쪽 구역에 드래그합니다.
  • 그러면 어떤 형식인지 물어보는 화면이 나옵니다. 원시 파일의 내용을 선택하고 확인합니다. 
  • 그러면 다른 오디오 파일을 재생하는것과 같은 방법으로 청취가 가능합니다. 물론 파일 선택해야 합니다.

매우 편리하고, 간단하고, .. 기타 등등 칭찬받을 만한 프로그램입니다. 더군다나 무료입니다. 

ocenaudio를 개발하신 분에게 경의를 표하는 바입니다.


스테레오 신호를 모노 신호로 만들기

혹시나 해서 ocenaudio에서 스테레오 신호에서 모노 신호를 추출하는 방법을 설명하겠습니다. 물론 신호처리에서 스테레오 신호를 그래로 사용해도 되지만, 실험을 간결하게 해서 원하는 신호처리결과를 검토하기에는 모노채널이 적합합니다. 

단일 채널 복사하기

  • 원하는 파일을 아래와 같이 불러오고 선택합니다.

  • 웨이브 화면에서 커서를 보시면 'I'비슷하게 보입니다. 이는 스테레오 두 채널을 동시에 조정하겠다는 의미입니다.
  • 마우스를 상단 거의 위쪽으로 이동하면(좌우가 아닙니다), 커서가 'T'모양 비슷하게 변합니다. 이는 위쪽 채널의 오디오 신호를 조정하겠다는 의미입니다. 아래쪽으로 이동하면 커서가 또 다른 모양으로 변합니다.
  • 한쪽 채널만 선택 가능 상태에서, 화면을 클릭하면 다음과 같이 색상이 변하면서 채널의 오디오 조정이 가능합니다. 
  • 이상태에서 컨트롤 + A로 키보드를 누르면, 선택 채널의 신호가 모두 선택되고, 다시 컨트롤 + C를 눌러서 복사합니다. 

이제 새로운 파일을 만들어 복사하면 됩니다.

  • '파일 -> 새로 열기 -> 선택'을 실행하면 아래 그림과 같이 복사된 채널 내용이 파일로 생성됩니다.
  • 화면의 왼쪽을 보면 untitle #? 이 생성되어 있습니다. 이것을 선택한 후에 를 원하는 형식과 이름으로 기록하면 됩니다. 
  • 그러면 모노 채널로 기록이 됩니다. 그런데 스테레오 채널 모두를 합성해서 모노 채널로 만들 수 있습니다.

스테레오를 모노 채널로 변경해서 기록

먼저 두 개의 채널을 합성하기 위해서는 두 채널의 이득을 미리 줄일 필요가 있습니다. 

  • 먼저 원하는 파일을 선택한 후에, 마우스를 두 채널의 중앙에 위치해서 'I'모양이 될 때 화면을 클릭해서 두 채널을 모두 선택합니다. 
  • 그리고 컨트롤+A로 모든 오디오 신호를 선택합니다. 
  • '효과-> 진폭-> 소리 크기'를 누릅니다. 그리고 아래 그림과 같이 조정한 후에 적용하기를 누릅니다. 반드시 -6dB를 적용해야 합니다. 

  • 그러면 신호의 크기가 줄어든 결과를 볼 수 있습니다. 

  • 위의 모노 채널을 만드는 방식으로 하나의 채널을 복사하고 파일을 생성합니다. 
  • 그리고 다시 스테레오 파일로 돌아가서 다른 채널의 신호를 모두 선택하고 복사합니다. 

  • 다시 모노 채널이 기록된 파일을 선택합니다. 그리고 전체 신호를 선택한 후에서 '수정 -> 특수 붙여 넣기'를 선택한 후에 아래 그림과 같이 설정합니다.

  • 그러면 아래 그림과 같이 두 채널의 신호가 합성됩니다. 신호의 크기를 보면 원래 스테레오 신호와 같은 크기로 만들어집니다.
  • 이 파일을 원하는 형식으로 기록하면 완료됩니다.

 

이제 만들어진 원시 데이터로 디지털 필터를 동작할 일만 남았습니다. 다른 글에서 다루겠습니다.


광고좀 꾹 눌러주시면 고맙겠습니다. 


위의 내용을 참조용으로만 사용해주세요. 무단 도용이나 무단 복제는 불허합니다.

기타 문의 사항은 gigasound@naver.com에 남겨 주시면 고맙겠습니다.