프로젝트 소개

Audio Tools는 임베디드 플랫폼에서 오디오 처리를 위한 헤더 전용 C++ 라이브러리로, Arduino 라이브러리 및 CMake C++ 라이브러리로 배포되며 PlatformIO와 ESP-IDF를 지원한다. 설계는 Arduino 관례를 따른다. 처리는 begin()과 end()로 시작하고 중지하며, 오디오 데이터는 Stream과 유사한 추상화를 통해 흐른다. 핵심 개념 - Audio Sources와 Audio Sinks: 소스에서 오디오 데이터를 읽고 싱크에 쓴다. 익숙한 Arduino Stream 모델을 그대로 반영한다. - MP3, AAC, WAV, FLAC 같은 형식의 인코더와 디코더로, EncodedAudioStream을 통해 사용한다. - 재생 시나리오를 위한 AudioPlayer 및 VideoPlayer 클래스. - USB Audio Class 2.0을 포함한 USB 오디오 입력 및 출력. - 다양한 DSP 라이브러리와의 통합. - 유선 또는 무선 링크를 통한 오디오 통신. - GeneratedSoundStream과 함께 사용하는 사운드 생성기(예: 사인 톤). - AudioEffectStream을 통한 Boost, Distortion, Echo, Reverb 같은 사운드 효과. - 3밴드 이퀄라이저. - ConverterStream용 변환기와 FilteredStream용 필터. - 주파수를 포함한 음표. - QueueStream용 버퍼 구현. - 정확한 시점에 오디오를 샘플링하기 위한 반복 타이머로, TimerCallbackAudioStream과 함께 사용한다. - 데스크톱 통합: Arduino 오디오 스케치를 Linux, Windows, macOS에서 실행하도록 빌드할 수 있다. 이 라이브러리는 서로 다른 오디오 구성 요소와 선택적 라이브러리가 함께 동작하도록 연결하는 접착제 역할을 한다. 각 스트림은 begin()에 전달되는 자체 구성 객체를 가지며, defaultConfig()는 보통 잘 동작하는 출발점을 제공하고 구성 매개변수는 클래스 참조 문서에 설명되어 있다. 예제는 종종 스트림 클래스를 바꾸는 방식으로 응용할 수 있다. 예를 들어 I2SStream을 AnalogAudioStream으로 교체하면 디지털 출력 대신 아날로그 출력을 얻을 수 있다. 간단한 예제는 플래시 메모리의 파일을 I2S로 스트리밍한다. MemoryStream이 오디오 데이터를 보관하고, I2SStream은 샘플 레이트, 채널, 샘플당 비트 수로 TX 모드에서 구성되며, StreamCopy 객체가 loop() 안에서 메모리 스트림의 데이터를 I2S 스트림으로 복사한다. 로깅은 내장되어 있으며 기본값은 경고 수준과 Serial 출력이고 AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Debug)로 변경할 수 있다. 유효한 수준은 Debug, Info, Warning, Error이다. AudioConfig.h에서 USE_AUDIO_LOGGING을 false로 설정하면 로깅을 비활성화하여 메모리 사용량을 줄일 수 있다. 문서 및 지원 - 위키에서는 튜토리얼, 소개, 예제, 선택적 라이브러리에 관한 참고 사항, 데스크톱에서 스케치를 실행하는 방법을 제공한다. - 생성된 클래스 문서는 주제별 및 알파벳순으로 정리되어 있다. - 이 프로젝트는 게시하기 전에 문서를 읽고 기존 이슈와 토론을 검색할 것을 사용자에게 요청한다. 이슈는 버그용이며, 그 밖의 질문은 토론에 속한다. 보고에는 시나리오나 스케치, 목표, 하드웨어, 소프트웨어 및 라이브러리 버전, 정확한 문제를 포함해야 한다. 설치 - 라이브러리를 zip으로 다운로드한 뒤 Arduino IDE에서 Library -> zip library를 사용하거나, 저장소를 Arduino libraries 폴더에 클론한다. git pull로 쉽게 업데이트할 수 있으므로 Git을 권장한다. 다른 플랫폼에 관한 정보는 위키에서 확인할 수 있다. 이 프로젝트는 GPL v3에 따라 라이선스가 부여되며 선택적 후원 링크를 제공한다.