PCM 라이브러리를 이용하여 아두이노로 오디오 파일 재생하기

출처: Electronics Hub

 

PCM(펄스부호변조) 이란?

PCM(펄스부호변조, Pulse Code Modulation)은 아날로그 신호를 디지털 신호로 변환하는 가장 기본적이고 널리 사용되는 기술 중 하나입니다. 이 기술은 전화 통신, 오디오 및 비디오 녹음, CD 및 DVD 등 다양한 응용 분야에서 사용됩니다.

 

PCM은 아날로그 신호를 디지털 신호로 변환하는 과정에서 다음의 세 가지 주요 단계를 거칩니다.

 

1. 샘플링(Sampling): 아날로그 신호를 일정한 시간 간격으로 측정하여 샘플을 추출합니다. 샘플링 주파수(또는 샘플링 레이트)는 1초 동안 추출하는 샘플의 개수를 의미하며, 일반적으로 헤르츠(Hz) 단위로 측정됩니다. 예를 들어, CD 오디오는 44.1kHz의 샘플링 주파수를 사용합니다. 이는 1초에 44,100개의 샘플을 추출한다는 의미입니다.

 

2. 양자화(Quantization): 추출된 샘플 값을 가장 가까운 이산 값(디지털 값)으로 반올림합니다. 이 과정에서 아날로그 신호의 연속적인 값이 디지털 신호의 이산적인 값으로 변환됩니다.

 

3. 부호화(Encoding): 양자화된 값을 이진수 코드로 변환하여 디지털 신호로 만듭니다. 각 샘플은 일정한 비트 수로 표현되며, 이 비트 수를 해상도(Resolution)라고 합니다. 예를 들어, 16비트 해상도는 각 샘플을 16개의 비트로 표현한다는 의미입니다.

 

 

여기서는 아두이노 PCM 라이브러리를 사용하여 8kHz 샘플링 주파수의 16비트 PCM을 스피커로 재생을 해보겠습니다.

 


 

먼저 회로를 구성합니다.

스피커와 연결되는 Arduino UNO 데이터핀은 11번 핀으로 해야합니다

 

 

 

제가 가지고 있는 스피커는 0.5W라 바로 저렇게 연결을 하였는데,

그 이상(3W 같은)이면 트랜지스터를 이용한 증폭회로를 구성하여 연결하면 되겠습니다.

 

스피커의 두 단자에 데이터 11번핀과 GND를 연결합니다.

 

 

그리고 PCM 라이브러리(zip파일)를 다운 받아 아두이노 라이브러리에 추가합니다.

 

https://github.com/damellis/PCM

 

GitHub - damellis/PCM: Arduino library for simple playback of audio samples using pulse-code modulation.

Arduino library for simple playback of audio samples using pulse-code modulation. - damellis/PCM

github.com

 

 

 

 

PCM 라이브러리 예제파일

 

 

예제파일을 업로드 하면 '아두이노 두에밀라노브~' 

하는 소리가 스피커에서 들릴 것입니다. (이탈리아어라는데 무슨 뜻인지는 모르겠네요;)

 

 

이제 오디오 파일을 편집하기 위해 프로그램(Audacity)를 설치합니다.

 

https://www.audacityteam.org/

 

Audacity ® | Free Audio editor, recorder, music making and more!

Record anything Excellent for podcasts, voice-over work or even just recording memos.

www.audacityteam.org

 

 

 

아두이노에는 4초 분량의 오디오만 저장할 수 있으니 이를 고려하여 파일을 엽니다.

파일 > 열기

 

오디오 파일을 불러온 후 왼쪽 탭 부분을 오른쪽 마우스 클릭합니다

 

16비트 PCM으로 형식을 바꾸어줍니다

 

 

파일 > 오디오 내보내기

모노, 샘플링 주파수를 8000Hz(8kHz)로 지정합니다

 

 

밑의 링크 사이트로 들어갑니다.

https://highlowtech.org/?p=1963

 

Simple Arduino audio samples

This tutorial explains how to do simple playback of short (~4 second), low-bitrate (8 KHz) audio samples from Arduino using only a speaker.

highlowtech.org

 

 

글을 쭉 내리다 보면 오디오 인코딩을 할 수 있는 파일을 다운로드 할 수 있습니다.

 

 

 

오디오 인코드 프로그램

 

만약 프로그램을 실행할 수 없다면

자바(Java)를 설치를 하면 됩니다. (프로그램이 자바로 설계되었음)

 

편집한 오디오 파일을 불러온다

 

클립보드에 카피가 됨

 

 

클립보드에 복사된 오디오 데이터를 sample[ ]에 붙여넣어 수정을 합니다.

 

 

 

헛소리 하지마 인마

 

위의 영상과 같이 아두이노 우노가 아닌 아두이노 메가를 사용하려면 데이터 핀을 10번으로 연결하고

라이브러리 C파일(PCM.c)에서 핀 번호를 수정하면 됩니다.