2015년 1월 21일 수요일

OSC(Open Sound Control) in Intel Edison - part 1

인텔 에디슨을 OSC 프로토콜을 사용해 스마트폰이나 PC, 또는 다른 에디슨에서 제어해 보도록 하겠다. 스마트폰에서는 Mrmr, TouchOSC, Control (OSC+MIDI)같은 앱을 사용하면 된다.

먼저 에디슨에 OSC 라이브러리를 설치한다. 여러 종류가 있지만 여기서는 liblo를 사용한다.  Liblo는 Steve Harris가 만든 경량 OSC 라이브러리로 LGPL을 따르기 때문에 추후 제품 개발에 사용하더라도 저작권 문제가 없다.

http://liblo.sourceforge.net/

먼저 liblo를 다운받는다. 여러가지 방법이 있지만 git를 사용해 클론을 하는게 편하다.

# git clone git://liblo.git.sourceforge.net/gitroot/liblo/liblo
Cloning into 'liblo'...
remote: Counting objects: 2561, done.
remote: Compressing objects: 100% (1218/1218), done.
remote: Total 2561 (delta 2001), reused 1657 (delta 1341)
Receiving objects: 100% (2561/2561), 663.60 KiB | 104.00 KiB/s, done.
Resolving deltas: 100% (2001/2001), done.
Checking connectivity... done.
#

만일 위와 같은 출력 대신 git가 설치되어 있지 않다는 에러가 나오면 (초기 상태는 git가 설치되어 있지 않음) 먼저 아래 명령으로 git를 설치하고 다시 위의 명령을 입력해 주면 된다.

# opkg install git

git clone이 정상적으로 실행되었으면 현재 디렉토리에 liblo라는 디렉토리가 만들어 졌을 것이다. 소스코드 다운로드가 된 것이므로 라이브러리를 빌드한다.

# cd liblo
# ./autogen.sh
'README' -> 'README.MD'
...
Now type 'make' to compile.
# make
...
# make install
...


여기까지 에러가 없이 진행되었다면 라이브러리가 빌드되어 정상적으로 설치 된 것이다. 다만 라이브러리가 설치된 위치가 /usr/lib가 아니고 /usr/local/lib이므로 라이브러리를 검색할 디렉토리를 설정해 주는것이 편하다. 먼저 텍스트 에디터로 /etc/ld.so.conf 파일을 열어보면 파일 내용이 비어있는데 아래의 내용을 추가하고 저장한다.

# vi /etc/ld.so.conf

/lib
/usr/lib
/usr/local/lib

ld.so.conf 파일을 수정했으면 다음의 명령을 입력해 준다.

# ldconfig

이것으로 liblo 라이브러리 설치가 완전히 끝났다. 라이브러리 뿐 아니고 이 라이브러리를 사용하는 기본 툴(oscdump, oscsend)도 함께 설치되어 있어 이 툴들을 이용하면 임의의 OSC 메시지를 보내거나 메시지를 받아 내용을 화면에 출력할 수 있다.

# oscdump
oscdump version 0.28
Copyright (C) 2008 Kentaro Fukuchi

Usage: oscdump <port>
or     oscdump <url>
Receive OpenSound Control messages and dump to standard output.

Description
port    : specifies the listening port number.
url     : specifies the server parameters using a liblo URL.
          e.g. UDP        "osc.udp://:9000"
               Multicast  "osc.udp://224.0.1.9:9000"
               TCP        "osc.tcp://:9000"

# oscsend
oscsend version 0.28
Copyright (C) 2008 Kentaro Fukuchi

Usage: oscsend hostname port address types values...
or     oscsend url address types values...
Send OpenSound Control message via UDP.

Description
hostname: specifies the remote host's name.
port    : specifies the port number to connect to the remote host.
url     : specifies the destination parameters using a liblo URL.
          e.g. UDP        "osc.udp://localhost:9000"
               Multicast  "osc.udp://224.0.1.9:9000"
               TCP        "osc.tcp://localhost:9000"

address : the OSC address where the message to be sent.
types   : specifies the types of the following values.
          i - 32bit integer
          h - 64bit integer
          f - 32bit floating point number
          d - 64bit (double) floating point number
          s - string
          S - symbol
          c - char
          m - 4 byte midi packet (8 digits hexadecimal)
          T - TRUE (no value required)
          F - FALSE (no value required)
          N - NIL (no value required)
          I - INFINITUM (no value required)
values  : space separated values.

Example
$ oscsend localhost 7777 /sample/address iTfs 1 3.14 hello
#

examples 디렉토리에는 이 라이브러리를 사용한 c와 c++ 예제 프로그램들을 찾아볼 수 있다.

C나 C++로 개발을 하는 경우는 이걸로 충분하고 파이선을 사용하고 싶으면 python wrapper를 설치해줘야 한다. 여기서는 pyliblo를 사용한다.

# wget http://das.nasophon.de/download/pyliblo-0.9.2.tar.gz
--2015-01-21 00:42:04--  http://das.nasophon.de/download/pyliblo-0.9.2.tar.gz
Resolving das.nasophon.de... 83.151.28.113
Connecting to das.nasophon.de|83.151.28.113|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 100079 (98K) [application/x-gzip]
Saving to: 'pyliblo-0.9.2.tar.gz'

100%[======================================>] 100,079     43.4KB/s   in 2.3s

2015-01-21 00:42:08 (43.4 KB/s) - 'pyliblo-0.9.2.tar.gz' saved [100079/100079]

# tar zxvf pyliblo-0.9.2.tar.gz
pyliblo-0.9.2/
...
pyliblo-0.9.2/COPYING
# cd pyliblo-0.9.2
# ./setup.py build
...
# ./setup.py install
...

여기까지 에러 없이 진행되면 pyliblo도 정상 설치가 된 것이다. Pyliblo를 사용한 간단한 예제 코드는 홈페이지(http://das.nasophon.de/pyliblo/examples.html)에서 찾을 수 있다. 

다음번에는 실제로 스마트폰에서 OSC 프로토콜을 사용해 에디슨의 하드웨어를 직접 제어하도록 해 보겠다.

OSC in Intel Edison - Part 2


댓글 없음:

댓글 쓰기