제작 계획 수정

by Audvans | 2017-06-13 05:27
android audio dsp linux modular multi effects p212 신호처리 오디오

1. 개요

기존의 계획으로는 안드로이드의 UI까지 활용하여 지원하는 것으로 생각하였으나, 애플리케이션의 개발 시간과 작업 중복 및 타 플랫폼의 이식 가능성을 볼 때 순수하게 ALSA-driver를 이용해서 리눅스 상에서 이펙트 엔진을 구동하는 것이 유리할 것이란 판단이 섰다. 그러나 타 플랫폼의 이식성을 생각해보면 3가지 플랫폼 (Linux/MacOS/Windows)를 모두 지원하는 API로 Jack (http://jackaudio.org) 이 있기에 이것을 생각해보려고 한다. 사실상 이들 API를 이용하는 것은 이펙터 엔진과 하드웨어를 연결하기 위함일 뿐, 특별히 성능을 저하시키는 요소가 없는 한 개발상에서 중요한 요소는 아니다. 

2. 이펙트 컨트롤

이펙터의 컨트롤은 BT를 이용하는 방법도 있고, USB 미디 페달을 사용하는 방법도 있는데, 반응성이라든가 구입의 편리함을 고려하면 USB 패달이 유리한 측면이 있다.




이 페달을 통해서 가능한 것은 이펙트 패치의 선택, 또 패치를 구성하고 있는 이펙트 각각의 on-off, 그리고 우측에 보이는 volume pedal (control 7), expression (controller 번호는 assign 가능) control일 것이다. 대개 expression pedal은 Wah effect나 delay 같은 것에 활용이 가능하다. 

풋페달을 쓰는 것으로 하면, 다른 안드로이드 이펙트 애플리케이션처럼 안드로이드 위에 이펙터를 구현해 넣을 이유는 없다고 본다. 사실 이들 이펙트는 이펙트의 질이 매우 떨어지고, 스마트 폰 기종에 영향을 크게 받는다. Effect engine의 업데이트는 그 스스로를 네트워크 접속을 시킴으로써 가능하게 할 수 있는데, Linux는 안드로이드와 달리 무선랜 접속이 불편하게 되어있어서 달리 보완할 방법은 없다. 

따라서, 이펙트의 프로그래밍이나 업데이트는 이펙터 하드웨어를 네트워크에 물려야만 가능하고, 나머지는 USB를 통해 미디 풋 페달을 연결해서만 가능하다. 

3. UI/이펙트 프로그래밍

또 이펙트를 프로그래밍하는 일은 주로 연주중이 아닌 시간이 넉넉한 연습 도중에 하게 되므로 이펙트 엔진에 가벼운 web server를 넣어두고 클라이언트에 UI를 구현하여 프로그래밍할 수 있도록 하는 것이 상대적으로 간편하고, 외부로부터 도움을 받을 때도 이 방법이 유리할 것으로 판단된다. 따라서 UI는 이펙트 프로그래밍을 담당하는 클라이언트 (외부 PC, 스마트폰, 태블릿 등등)를 통해 BT 또는 Wifi로 하는 것이 가장 편리한 방법이 아닐까 생각된다. 

4. Fixed point/Floating point

이펙트를 구현함에 있어서 현재의 입장은 모든 처리 과정을 fixed point 연산으로 하는 것이 처리 속도를 봤을 때 바람직할 것으로 보여지지만 이것은 구현 후에 시스템 부하가 문제가 된다거나 할 때 생각해 볼 문제이고, 현재는 모두 floating point 처리를 기본으로 하는 것으로 한다. 즉,구현은 저가의 싱글보드컴퓨터 (Raspberri PI/ODROID/p212/...)에 한다고 하더라도 음질만은 타협하지 않는 방향으로 진행하되, 속도상의 문제가 발견되면 점차적으로 sampling rate을 낮추거나 계산량이 많은 부분을 fixed point로 바꿔 진행할 수 있다고 본다. 그러나 현재 arm processor들도 가격대 성능비가 계속해서 향상되고 있고 음질까지 타협하게 되면 사실상 이펙터를 만들 이유가 없어지므로, 처리 속도를 개선하기 위한 다른 방법을 생각해보는 것이 합리적이지, 구태어 fixed point로 만들 이유는 없다고 본다.

5. Sample rate

Sample rate는 distortion effect를 사용하는 경우에는 내부에서 aliasing이 발생할 수 있으므로, 사실상 입력 신호의 최대 주파수의 4배 이상으로 보는 것이 일반적이다. 고품질의 이펙터에서는 16배 이상으로 하기도 한다. 일렉 기타에서 나오는 신호는 대개 10kHz 이내로 보는데, 여기서 8배 정도를 고려하더라도 88.2 kHz 정도를 생각해 볼 수 있는데, 이것은 프로세서 성능에 크게 의존하고 있는 부분이므로 이 프로젝트에서는 aliasing을 감수하고 44.1kHz로 고정하려고 한다. 

6. 모노 vs. 스테레오

기타 이펙트는 입력 자체가 모노이기 때문에 모노로 구현되어야 할 것으로 보이지만, 스테레오 코러스/딜레이라든가 스테레오 리버브 같은 이펙트를 붙여서 모노를 강제로 스테레오로 만드는 경우도 있다. 또 연습할 때 이어폰이나 헤드폰을 이용하게 되는데, 모노를 단순히 좌우로 복사해서 만들게 되면 어색한 느낌이 있기 때문에, 입력은 모노이지만 대부분의 이펙트가 출력을 스테레오로 만든다.

그러나, 조금 애매한 것이 기타 앰프는 모노 입력을 받도록 되어있는 것이 보통이고 모노라고 하더라도 스테레오 이펙트를 사용할 수 있어야 하므로, 다음과 같이 결정하도록 한다.

- 입력은 모노로 한정한다.

- 출력은 2채널 스테레오로 한다.

- 이펙트 체인에 각 모듈의 입출력 개수를 이펙트에 따라 선택할 수 있도록 한다.

- 입출력 개수가 다른 경우 사용자가 routing 방법을 선택할 수 있도록 한다. 즉, 모노 출력이 좌측 입력으로만 연결되거나 좌우측 입력에 복사되어 연결되거나 하는 방법으로 말이다.

7. 개발 환경

ALSA 기반으로 진행하려고 하였으나 다양한 플랫폼에서 동작해야 할 필요성이 있기에 Jack에서 구현하는 것으로 한다. 사실상 이 개발은 약간의 이펙트 플러긴을 동작시킬 수 있는 호스트 애플리케이션을 만드는 것이라 개발상의 부담도 별로 없고 시험 운영을 통해 계속해서 API를 개선해나가면 될 것으로 판단된다. 

댓글 0

MADE BY

Audvans

analog audio, audio dsp, c/c++, digital audio, dsp, guitar playing, hackintosh, mpich, Node.js, orcad, parallelism, pascal, perl, Python, raspberry pi, s905x, spice
제작 계획 수정현재글 Linux 설치하기.. 이전글