Tag Archives: Alchemy

Alchemy를 이용한 Flash Equalizer 구현

Alchemy를 이용해서 Flash 10에서 사용 가능한 Equalizer를 구현했습니다. Flash에서 자체 Equalizer를 제공하지 않아서 여러가지로 고민했었는데… 일단 동작은 정상적으로 하네요. 처음에 PixelBender를 이용해서 구현을 할려고 했었는데 여러가지로 PixelBender는 오디오 처리하기에는 문제가 있는거 같더군요. 회사에서 C로 구현된 Equalizer소스가 있어서 Alchemy를 이용해서 Flash에서 돌릴수 있게 구현했습니다. Flash 10에서만 동작합니다.

 

위에 플래시가 안보이시면 이 페이지로 가시면 보실수 있습니다.

소스는 공개하기 힘들듯 하지만, 요청이 있다면 C Equalizer소스를 제외한 부분만 공개하겠습니다. Alchemy 개발은 그리 어렵지는 않았는데 문서화가 좀 부족해서 여러가지 자료 참고해서 구현했습니다. 막상 개발하고 나니 인터페이스하는 소스는 얼마 안되네요 🙂

사용자 삽입 이미지eq.c 소스는 250줄 정도 되고, 이중 100줄 정도가 Alchemy 인터페이스 소스이지만, 많은 부분 재사용할수 있는 부분입니다. 이걸 컴파일하면 플래시 컴포넌트 파일인 swc 파일이 나옵니다. 용량이 82KB 소스에 비하면 많이 커졌네요. 더욱 놀라운건 마지막 as파일의 크기입니다. 파일 열어보면 거의 바이트 코드가 풀어서 적혀 있습니다.

Equalizer소스가 길지않으니 한번 AS3로 직접 짜보고 비교를 해보는것도 재미있을듯하네요. 그리고 인터페이스 소스가 메모리카피가 있어서 좀 비효율적인데 copy 줄일수 있는지도 고민해봐야할듯합니다.

구현하면서 여러가지 좋은 정보들도 많이 얻었습니다. PixelBender에 대해서도 알게 됐고, 플래시 10에서 오디오 처리의 가능성과 한계를 어느정도 알게되었네요.

음악은 아직 제목이 없는 제 음악입니다.^^ (20080208.mp3) 즐감하세요~

Adobe Alchemy

Alchemy는 어도비에서 개발중(?)인 C/C++ to ActionScript3 컴파일러(AVM2) 입니다. 이런 프로젝트가 회사 차원에서 진행됐다는거 자체가 놀랍네요. 그냥 프로그래머의 호기심으로  시작했을만한 프로젝트 같네요.  아직 회사차원의 공식적인 지원은 하지 않고 있지만, 꽤 유용할 것 같네요. 이미 둠(doom)을 포팅했네요. 원래버전 거의 그대로네요. 속도도 차이 없는듯하고… 다만 alt키로 strife가 안되서 플레이가 어렵고, 음악은 안나오네요.

요즘 주로 개발을 C++과 ActionScript3로 하고, 둘을 ExternalInterface로 연결하고 있는데… C++이 있기 때문에 사용자가 반드시 파일을 받아서 설치하는 과정이 필요합니다. C++로 되어 있는 부분을 Alchemy를 이용해서 AVM2(ActionScript3 Virtual Machine)에서 돌아갈수 있게하면, 사용자들을 더 쉽게 끌어들일수 있을듯하네요. 당연하지만, VM의 SandBox의 제한은 그대로 있다고 하네요. SandBox의 제한내에서 얼마나 플래시에서 제공하지 못하는 새로운 기능을 넣을수 있을지 의문이 들긴하네요. 속도는 C/C++에 비해서 2~10배 정도 느리다고 하네요.

윈도우즈에서는 cygwin에 flex sdk와 alchemy sdk 설치후 alchemy에서 제공하는 gcc로 컴파일 합니다.