Huny's Dev Blog

huny.dev

PCM(Raw) Audio 재생 방법

PCM(Raw) 오디오 파일은 헤더나 코덱 정보가 없어 직접 재생이 불가능하다. 이를 재생하기 위해선 원시데이터에 대한 포맷을 알려주거나 헤더를 추가하여 재생 가능한 파일로 변경해야 한다. 이를 위한 방법으로는 Audicity, Goldwave, Adobe Audition, FFMPEG CLI 프로그램을 사용하거나, 헤더를 직접 생성하여 WAV 파일로 변환하는 방법, 브라우저를 이용하는 방법 등이 있다.

Hun Jang

pcm(raw) 오디오 파일은 헤더나 코덱 정보를 포함하지 않는 파일을 의미한다. 따라서 pcm 오디오 파일은 waveform을 저장한 음원은 맞지만 컴퓨터는 이 음원이 어떤 포맷인지, 어떤 코덱을 사용했고 컨테이너가 무엇인지에 대한 정보를 알 수 없기 때문에 곧바로 재생하는 것은 불가능하다. 따라서 pcm 오디오 파일을 재생하기 위해서는 이 원시데이터에 대한 포맷을 알려주거나 원시데이터에 헤더를 추가하여 재생가능한(playable) 파일로 변경해주어야 한다. 인터넷이 되는 경우 가장 손쉬운 방법은 audicity, goldwave, adobe audiotion을 사용하거나 ffmpeg cli 프로그램을 사용하는 것이다. 만약 인터넷이 되지 않는 환경에서 pcm 오디오를 재생해야한다면 헤더를 직접 생성하여 pcm 오디오를 wav(wave) 파일로 바꾸어 기본 내장 오디오 플레이어로 재생하거나 브라우저로 재생할 수도 있다. 또한 local에서 실행가능한 javascript 구문을 사용하여 browser에서 직접 pcm 오디오를 재생하는 방법도 소개한다.

아래에서 소개하는 모든 방법들은 pcm 오디오 데이터가 어떤 포맷인지 사전에 알고 있는것을 전제로 한다. 포맷을 모르는 pcm 파일은 binary 데이터 파일과 다르지 않기 때문이다.

단, 확장자가 없는 이미지 파일도 해당 파일이 이미지 파일이라는 것을 미리 알고 있다면 누구나 확장자를 jpeg, bmp, webp, gif, png 등 바꿔보려는 시도는 해볼 것이다. 따라서 사전에 미리 포맷을 알아내지 못했어도 음원이 오디오 원시 데이터 라는 것만 알고 꼭 재생이 필요하다면 시간은 걸리지만 다양하게 코덱 옵션을 변경해가며 소리가 나오는 값을 찾을 수도 있을 것이다.

 

컴퓨터에게 포맷을 알려주는 방법

Audicity(서드파티 애플리케이션)을 사용하는 방법

goldwave나 adobe audition은 상용 프로그램이므로 audicity를 사용하여 pcm 오디오 파일을 재생하는 방법을 소개한다.

 
 

ffmpeg를 사용하는 방법

audicity를 사용하면 waveform을 직접 보면서 재생하거나 다른 포맷으로 저장할 수 있다. ffmpeg를 사용하면 pcm 오디오 파일을 원하는 다른 포맷으로 변환할 수 있다.

 
 

wav 헤더를 생성하여 삽입하는 방법

wav 헤더를 만드는 이유

비교적 간단하면 대부분 os와 플레이어에서 지원하기 때문이다.

wav 헤더의 구성요소는 간단하며 아래와 같은 구성을 가진다.

프로그래밍 언어를 사용하는 방법

linux 같은 경우 python이 기본으로 설치되어 있는 배포판도 있고, 만약 인터넷이 되지 않더라도 python이 설치되어 있거나 다른 프로그래밍 언어가 설치되어 있다면 pcm 파일에 헤더를 추가할 수 있다.

여기서는 python을 사용하는 방법을 소개한다. 다른 언어도 맥락은 동일하므로 원하는 방법대로 알고리즘을 구현하면 된다.

 

PowerShell 을 사용하는 방법

프로그래밍 언어도 설치되어 있지 않고 아무것도 다운로드 받을 수 없는데 pcm 오디오 파일을 재생해야 한다면 그런 상황이 생긴드면 아래의 방법으로도 헤더를 만들수 있다.

windows는 powershell을, linux에서는 dd, printf을 사용한다.

 

브라우저를 사용하는 방법

js코딩이 조금 필요하지만 브라우저 오디오 컨트롤러도 사용할 수 있고 local 환경 뿐만 아니라 웹개발 환경에서도 pcm 데이터를 재생할 수 있으므로 알아두면 유용하다.

js 런타임에서 AudioContext를 지원하는 Browser(Chrome, Edge 등)를 사용하는 방법이고 linear pcm 규격만 지원하므로 이점을 반드시 참고해야 한다. 다른 포맷은 지원하지 않는다

 
 
 

You might also like

BlogPro logo
Made with BlogPro