내장형 시스템에서 오디오 파일을 효과적으로 디코딩하여 재생하는 방법
DigiKey 북미 편집자 제공
2019-11-05
오디오 인터페이스가 내장형 설계에 필요한 기능이라는 인식이 증가하고 있습니다. 동시에 내장형 시스템 사용자는 우수한 오디오 품질을 기대합니다. 이는 개발자에게 마이크로 컨트롤러 기반 시스템에서 MP3 또는 기타 오디오 파일을 실행하는 방법을 모색해야 하는 문제를 야기합니다. 이러한 시스템은 리소스가 제한적일 뿐 아니라 개발자가 Linux 기반 시스템에서 간편하게 활용할 수 있는 오디오 인터페이스도 부족합니다. 따라서 오디오 파일을 디코딩하고 콘텐츠를 아날로그 사운드로 효과적으로 변환하기가 더욱 어렵습니다.
개발자는 또한 비용, 공간 및 개발 시간을 크게 고려하여 하드웨어 또는 소프트웨어 솔루션을 신중하게 선택하고 사용할 부품을 결정해야 합니다.
이 기사에서는 개발자가 내장형 장치에 오디오 파일을 효율적이고 효과적으로 추가하기 위해 사용 가능한 AKM Semiconductor, Adafruit, STMicroelectronics 및 Cirrus Logic Inc.의 다양한 하드웨어 및 소프트웨어 솔루션을 소개합니다. 또한 성공적인 구현에 도움이 되는 몇 가지 “유용한 정보”를 제공합니다.
내장형 오디오 형식 선택
오디오 기능을 내장형 장치에 통합하는 방법을 알아보기 전에 MP3 오디오 형식이 일반적으로 선호되는 이유를 생각해 보면 도움이 됩니다. 개발자가 내장형 시스템에서 실제로 사용할 수 있는 오디오 형식은 펄스 코드 변조(PCM), WAV, MP3의 세 가지입니다.
PCM은 오디오 코덱에서 디지털 방식으로 표현된 오디오 스트림을 사용자가 들을 수 있는 아날로그 사운드로 변환하는 데 주로 사용되는 압축되지 않은 무손실 오디오 형식입니다. 이 형식은 CD 시대에 주로 지원되던 표준 형식입니다. PCM은 내장형 시스템에서 사용할 수 있지만, 일반적으로 PCM 파일이 WAV 또는 MP3 파일보다 훨씬 크다는 문제점이 있습니다. 비용이 중요하고 리소스가 제한적인 장치의 경우 이를 지원하기 위해 대용량 외부 메모리 장치나 대용량 메모리를 탑재한 마이크로 컨트롤러 제품이 필요할 수 있습니다. 따라서 PCM은 대개 제품의 볼륨이 작거나, 제품에 오디오 파일이 하나만 있거나, 비용 제약이 없는 경우에 사용됩니다.
WAV 파일 또한 압축되지 않은 무손실 파일이므로 PCM과 흡사합니다. WAV 파일은 내장형 응용 제품에 PCM 파일보다 널리 사용되지만 마찬가지로 상당히 많은 공간을 차지할 수 있습니다. 따라서 이 형식은 내장형 시스템에 SD 카드나 다른 대용량 메모리 장치가 있는 경우에 적합합니다.
MP3 파일은 대부분의 시스템에서 선호되는 오디오 형식입니다. MP3 파일은 손실이 크므로 오디오를 인코딩할 때 오디오 효율이 일부 저하될 수 있습니다. 하지만 이 형식은 PCM 또는 WAV보다 훨씬 작아서 오디오 파일을 장치로 전송하여 저장하는 시간이 단축될 뿐 아니라 메모리 요구 사항도 작습니다.
MP3가 적합한 경우 개발자는 하드웨어 또는 소프트웨어에서 이 형식을 사용하도록 선택할 수 있습니다.
하드웨어 기반 MP3 디코딩
가장 빠르고 가장 쉬운 솔루션은 Adafruit의 1681 VS1053B와 같은 하드웨어 MP3 디코더를 사용하는 것입니다(그림 1). VS1053B에서는 직렬 스트림을 통해 MP3, WAV, OGG 또는 MIDI 파일 형식을 직접 사용할 수 있으므로 개발자가 파일을 손쉽게 디코딩할 수 있습니다. 스트림을 디코딩한 후 VS1053B에서 18비트 디지털 아날로그 컨버터(DAC)를 사용하여 오디오로 변환합니다.
그림 1: Adafruit의 VS1053B는 오디오 스트림을 가져와서 해당하는 아날로그 오디오 신호로 디코딩하는 하드웨어 기반 MP3 디코더 칩입니다. 이 솔루션을 사용하려면 최소한의 소프트웨어가 필요하며 개발자가 MP3 파일을 디코딩하거나 변환하는 방법을 알지 못해도 됩니다. (이미지 출처: Adafruit)
무엇보다도 VS1053B는 I2C를 사용하는 다른 많은 디코더와 달리 간단한 UART를 사용하여 디버깅하고 제어할 수 있습니다. 또한 이 칩에는 비트 읽기, 스위치 또는 상태 LED 설정과 같은 응용 제품 기능에 사용할 수 있는 8개의 범용 입력/출력 핀이 있습니다.
하드웨어 기반 솔루션을 시험해 보려는 개발자는 VS1053B를 위한 자체 브레이크아웃 기판을 제작할 필요가 없습니다. Adafruit는 1381 VS1053B 코덱 + MicroSD 브레이크아웃 기판을 제공합니다. VS1053B와 함께 이 기판에는 디코딩할 오디오 파일을 저장하는 데 사용할 수 있는 MicroSD 카드 슬롯이 있습니다(그림 2). 브레이크아웃 기판은 SPI 또는 SDIO 포트를 통해 SD 카드에 연결되는 마이크로 컨트롤러에 연결하여 오디오 파일을 읽도록 설계되었습니다. 그런 다음 디코딩을 위해 오디오 파일 스트림을 VS1053B에 전송합니다. 필요에 따라 VL1053B의 출력을 헤드폰 잭이나 스피커에 직접 전달할 수 있습니다.
그림 2: Adafruit의 1381 VS1053B 코덱 + MicroSD 브레이크아웃 기판에는 마이크로 컨트롤러를 쉽게 연결하여 오디오를 재생하는 데 필요한 하드웨어가 포함되어 있습니다. 브레이크아웃 기판에는 마이크로 컨트롤러에서 SPI를 통해 파일을 읽은 다음 디코딩을 위해 VS1053B로 전송할 수 있는 기판 실장 MicroSD 카드 슬롯이 있습니다. (이미지 출처: Adafruit)
소프트웨어 기반 MP3 디코딩
조금 더 복잡하지만 부품 명세서(BOM)의 관점에서 더 경제적인 솔루션은 마이크로 컨트롤러에서 MP3 파일을 디코딩한 다음 해당 파일을 오디오를 생성하는 오디오 코덱으로 스트리밍하는 것입니다. 개발자는 효과적인 소프트웨어 기반 솔루션을 구현하기 위해 다음과 같은 몇 가지 중요한 부품을 구현해야 합니다.
- MP3 디코더 라이브러리
- 메모리 스토리지 구동기
- 파일 시스템 스택
- 직접 메모리 액세스(DMA) 구동기
- I2S 구동기
- I2C 구동기
- 오디오 코덱 구동기
처음에는, 소프트웨어 개발자가 할 일이 많고 MP3를 디코딩하여 오디오로 전환하기 위해 소프트웨어 부품을 통합하는 것이 매우 어려울 것처럼 보입니다. MP3 디코딩 솔루션을 구현하는 가장 좋은 방법은 오디오 인코딩, 디코딩 및 일반 처리를 지원하는 마이크로 컨트롤러 플랫폼을 활용하는 것입니다.
인터넷상에 제공되는 많은 오픈 소스 솔루션이 있지만, 전문가의 시범을 거쳐 개발자가 활용할 수 있는 것으로 검증된 솔루션으로 STM32 도구 체인이 있습니다. STM32 마이크로 컨트롤러 제품군에는 오디오 예제와 개발 라이브러리를 포함하는 STM32CubeIDE에 통합되는 STM32CubeMx라는 개발 도구가 있습니다. 예제 및 도구는 X-CUBE-AUDIO라는 STM32CubeMX 애드온 플러그인의 일부입니다. 이 플러그인은 Arm Cortex-M4 클래스 마이크로 컨트롤러에 있는 STM32 프로세서에 MP3 디코딩용 오디오 라이브러리를 제공합니다.
특히, STM32F469IGH6TR 마이크로 컨트롤러에서 실행할 MP3 플레이어를 생성하는 코드 프로젝트 예시가 있습니다. STM32F469IGH6TR은 1MB 플래시와 384KB RAM을 포함하고 180MHz로 실행되는 매우 우수한 마이크로 컨트롤러입니다. 이 마이크로 컨트롤러는 거의 모든 응용 제품에 적합한 풍부한 GPIO 및 주변 장치 기능을 제공하는 176핀 UBGA 패키지로 제공됩니다.
그림 3: STM32F469IGH6TR은 1MB 플래시와 384KB RAM을 탑재한 180MHz Arm Cortex-M4 프로세서입니다. 176핀 UBGA 패키지는 거의 모든 내장형 응용 제품에 적합한 풍부한 GPIO를 제공합니다. (이미지 출처: STMicroelectronics)
MP3 플레이어 코드 예제는 STM32F469I-DISCO Discovery 키트에서 실행됩니다(그림 4). STM32F469I-DISCO에는 MP3를 디코딩하여 재생하는 데 필요한 모든 것이 포함되어 있습니다. 이 기판에는 개발자에게 MP3 시연 상태를 업데이트하는 데 사용되는 4인치 800픽셀 x 480픽셀 LCD와 플레이어 컨트롤(예: 재생, 중지, 다음, 이전)이 있습니다. 또한 Discovery 기판에는 결과 오디오를 스테레오로 재생하는 헤드폰 잭이 포함되어 있습니다. 예제 코드와 관련한 유일한 주의 사항은 외부 소스, 특히 마이크로 USB 커넥터를 통해 연결되는 USB 구동 대용량 스토리지에서 MP3 파일을 제공해야 한다는 것입니다.
그림 4: STM32F469I-DISCO Discovery 키트에는 MP3 플레이어 데모를 작동하는 데 사용되는 4인치 LCD가 있습니다. 오디오 파일은 외부 USB 대용량 스토리지 장치에서 온보드 마이크로 USB 커넥터를 통해 제공됩니다. 또한 MP3 파일을 디코딩하는 방법에 대한 작업 예시가 제공됩니다. (이미지 출처: STMicroelectronics)
MP3 디코딩 라이브러리에는 Arm Cortex-M4 이상의 프로세서가 필요하지만, 밝혀진 바와 같이 개발 기판에서 데모 코드를 실행하는 것은 작업 예시를 확인하고 실험할 뿐만 아니라 응용 제품 성능을 확인하는 데 좋은 방법입니다. Arm 코어의 SWD(Serial Wire Debug) 인터페이스와 ITM(Instrumentation Trace Macrocell) 기능을 사용하면 프로그램 카운터에 대한 통계 분석을 수행하여 MP3 파일을 디코딩하고 재생하는 데 사용되는 대략적인 처리 성능을 확인할 수 있습니다. CPU 시간의 약 50%는 LCD 디스플레이를 업데이트하는 데 사용되고 MP3를 디코딩하는 데는 10% 이하만 사용되는 것으로 밝혀졌습니다. STMicroelectronics 오디오 라이브러리는 매우 효율적이며, DMA를 사용하여 I2S를 통해 디코딩된 프레임을 오디오 코덱으로 푸시합니다.
LCD가 필요하지 않지만 다른 시스템 이벤트를 기반으로 하여 오디오를 재생해야 하는 응용 제품의 경우 기능이 더 적은 프로세서를 사용해도 됩니다. 예를 들어, 개발자는 STM32F469VGT6을 눈여겨 볼 수 있습니다. STM32F469VGT6은 100핀 LQFP에서 1MB 플래시와 384KB RAM을 탑재하여 여전히 우수한 성능을 발휘합니다. 이 부품은 개발자와 제조업체에서 부담스럽게 여길 수 있는 BGA 실장 면적을 차지하지 않습니다.
그림 5: STM32F469VGT6은 1MB 플래시와 384KB RAM이 탑재된 180MHz 프로세서입니다. 이 부품은 STMicroelectronics 오디오 라이브러리에서 지원되는 Arm Cortex-M4 제품군을 기반으로 합니다. 그림에서 볼 수 있듯이 이 부품은 100핀 LQFP로 제공되므로 개발자와 제조업체의 부담을 들어줍니다. (이미지 출처: STMicroelectronics)
개발자는 응용 제품에 적합하다고 생각하는 솔루션을 선택하여 실험한 후, 해당 솔루션에서 디코딩된 MP3 파일을 디지털 파형에서 아날로그 사운드로 변환하는 방법을 확인해야 합니다.
코덱을 사용하여 오디오 스트림을 사운드로 변환
대부분의 하드웨어 기반 디코딩 솔루션에는 수신된 디지털 파일 형식을 아날로그 사운드로 변환하는 데 사용할 수 있는 디지털 아날로그 컨버터(DAC)도 포함되어 있습니다. 하지만 이러한 칩에는 개발자가 자체 오디오 코덱을 추가할 수 있는 I2S 출력 포트가 있는 경우가 많습니다. 소프트웨어 기반 솔루션에서 디코딩된 디지털 스트림을 오디오로 변경하려면 코덱이 필요합니다. 이렇게 할 수 있는 방법은 두 가지입니다.
첫째, 디지털 오디오와 마이크로 컨트롤러의 기판 실장 DAC 주변 장치를 사용하여 오디오 출력을 생성할 수 있습니다. 일반적으로 이 방법은 우수한 품질의 출력을 반환하기 위해 개별 부품과 아날로그 회로의 신중한 설계 및 레이아웃이 추가적으로 필요하므로 오디오를 생성하는 최상의 방법은 아닙니다. 또한 DAC를 구동하여 실행하기 위해 마이크로 컨트롤러에서 몇 가지 추가 설정을 수행해야 하며, 그 이후 DAC를 올바르게 공급하기 위해 일반적으로 프로세서 전력이 더 필요합니다.
둘째, 일반적으로 권장되는 방법은 통합 오디오 코덱을 사용하는 것입니다. 오디오 코덱은 기본적으로 아날로그 출력을 생성하기 위한 모든 회로를 갖춘 집적 회로입니다(예: DAC 및 D급 증폭기). 오디오 코덱은 이산 솔루션에 비해 매우 작은 기판 공간을 차지하고 오디오 출력 스트림 제어를 위한 디지털 회로가 내장되어 있다는 이점이 있습니다.
예를 들어, Cirrus Logic의 CS43L22-CNZ DAC는 개발자에게 다음과 같은 광범위한 특징을 제공합니다.
- I2C 버스를 통한 DAC 제어
- 다양한 출력(예: 헤드폰, 스피커)
- 외부 출력 필터링이 필요 없음
- 볼륨, 저음 및 고음 제어를 위한 디지털 신호 프로세서 엔진
- 튐 현상 및 클릭 소리 억제
CS43L22-CNZ는 I2S 인터페이스를 통해 마이크로 컨트롤러에서 PCM 인코딩 데이터 스트림을 수신한 다음 내부 DAC를 사용하여 변환합니다(그림 6). CS43L22-CNZ DAC는 스피커, 헤드폰 등 다양한 출력을 구동할 수 있습니다. 단일 모노 채널을 사용할 경우 CS43L22-CNZ는 2W 전력을 스피커로 출력하고, 스테레오 채널을 사용할 경우 채널당 최대 1W를 출력할 수 있습니다.
그림 6: CS43L22-CNZ DAC는 모노 출력을 통해 최대 2W를 출력하거나, 스테레오 오디오의 경우 채널당 1W를 출력할 수 있는 오디오 DAC입니다. DAC에는 볼륨, 저음 및 고음 제어를 위한 간편한 컨트롤을 제공하는 디지털 신호 처리 엔진이 있습니다. (이미지 출처: Cirrus Logic)
개발자에 따라 CS43L22-CNZ의 모든 기능이 필요하지 않을 수도 있으며 미니멀리즘을 실현하여 일부 BOM 비용을 절약할 수 있습니다.
물론 응용 제품의 요구 사항에 따라 다르지만, 이러한 접근 방식에 적합한 한 가지 예로는 AKM의 AK4637EN 오디오 코덱이 있습니다(그림 7). 이 코덱은 스피커 전용 출력 DAC를 포함하는 24비트 모노 채널 코덱입니다. 또한 응용 제품에서 호출할 경우 오디오를 녹음하는 데 사용할 수 있는 마이크 증폭기가 포함되어 있습니다.
그림 7: AK4637EN은 소형 20핀 QFN 패키지로 제공되고 최대 1W에서 단일 모노 오디오 채널을 출력하는 오디오 DAC입니다. I2C 버스를 통해 코덱을 디지털 방식으로 제어하여 출력 볼륨 및 자동 출력 제어를 관리할 수 있습니다. (이미지 출처: AKM Semiconductor)
대부분의 오디오 코덱과 마찬가지로 AK4637EN에도 마이크로 컨트롤러에서 디지털 오디오 신호를 수신하기 위한 I2S 인터페이스가 있습니다. 또한 이 칩에는 볼륨 제어와 같은 온보드 실장 디지털 기능을 제어하는 데 사용되는 I2C 인터페이스가 포함되어 있습니다.
모든 제품 특징과 마찬가지로 설계자는 시간을 할애하여 시스템의 요구 사항을 신중하게 검토하여 코덱 기능 및 비용과 대상 BOM 비용 간의 균형을 조정해야 합니다.
MP3 솔루션 구현을 위한 유용한 정보
다음은 응용 제품에 적합한 솔루션을 선택할 때 개발자가 사용할 수 있는 “유용한 정보”입니다.
- 외부 MP3 디코더와, MP3 디코더를 직접 실행할 수 있는 더 우수한 마이크로 컨트롤러 간의 예상 수량에 따른 BOM 비용 분석을 수행합니다. 더 나은 의사 결정을 위해 최악의 상황에서의 수량 수치, 달성 가능한 수량 수치, 최적의 수량 수치를 사용하여 범위를 설정해야 합니다.
- I2S를 수용하는 오디오 코덱을 사용하여 출력 오디오를 생성합니다. 이산 솔루션은 조정하는 데 많은 시간이 소요될 수 있으며 그에 따라 부품 비용이 증가할 수 있습니다.
- 개발 기판을 통해 MP3 소프트웨어 라이브러리에 대한 성능 분석을 수행하여 솔루션을 실행하는 데 필요한 최소한의 마이크로 컨트롤러 특징을 파악합니다.
- DMA 채널을 활용하여 I2S 인터페이스를 통해 디코딩된 MP3 프레임을 오디오 코덱으로 전송합니다. 그러면 보다 경제적으로 프로세서를 사용할 수 있습니다.
- MP3 소프트웨어 라이브러리 라이선스를 신중하게 검토하여 상업용 제품에 사용할 수 있는지 확인합니다. 대부분의 오픈 소스 라이브러리는 칩 벤더가 제공하는 경우를 제외하고 상업용 제품에 사용할 경우 유료 라이선스가 필요합니다.
이러한 유용한 정보에 따라 개발자는 내장형 응용 제품에 적합한 오디오 솔루션을 선택할 수 있습니다.
결론
이전에는 내장형 시스템에 오디오를 추가하는 과정이 복잡했지만, 위에서 설명한 바와 같이 지금은 개발자가 선택할 수 있는 솔루션이 광범위합니다. 솔루션은 전용 외부 코덱부터 통합 소프트웨어 라이브러리까지 다양합니다. 여전히 개발자는 응용 제품의 요구 사항을 신중하게 평가하여 가장 적합한 솔루션 경로를 결정해야 합니다.
고려해야 할 요소로는 BOM, 솔루션 복잡성, 개발 및 통합 시간과 비용, 솔루션 확장성 등이 있습니다. 제품 수량, 대상 비용, 개발 일정 등을 기준으로 이러한 요소에 가중치를 적용하면 가장 적합한 솔루션을 파악할 수 있습니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


