Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Raspberry PiとPdでオリジナルのシンセを作る
美山千香士

ドイツ/ケルン音楽舞踏大学講師

ケルンメディア大学フェロー

スイス/チューリッヒ芸術大学非常勤講師

チューリッヒICST研究員
Github

本日お見せするパッチ
プログラムはGitHubに公開しています。

https://github.com/chikashimiyama/pdj2
Demo
!

RaspberryPi+Pd+MIDIキーボード+赤外線センサー
によるミニシンセ
Raspberry Piとは
•

Raspberry Pi Foundationによる超小型コンピュータ

•

Arm ベースのCPU (Linuxが動かせる)

•

512MB のRAM

•

1x Audio out

•

HDM...
Raspberry PiでPd-extendedを動かすには
•

Satelite CCRMAをインストールする
•

Satelite CCRMAはスタンフォード大学の開発してい
るRaspberry Pi用のLinuxディストリビューショ...
Xフォワーディング
•

RaspberryPi本体にマウス、キーボード、ディスプレイを繋
がなくとも、他のコンピュータからRaspberryPiをEthernet
経由で操作し、Pdのプログラミングをする事が可能

Pdプログラミング

音
...
MIDIも繋げるの?
•

多くのUSB-MIDI機器はRaspPiが自動的に認識する
Pdパッチと組み合わせれば
自作のミニシンセが簡単に出来る!
USB
音質をもっと良くしたい
•

USBオーディオ・インターフェースを使う

Creative Media
Sound Blaster Play

・但しオーディオインターフェースを使うと、サンプル・レートが決め打ち(44.1k)になる
・USBバ...
MIDIだけでなくセンサーとも組み合わせて
音をコントロールしたい
•

方法1:Arduinoと組み合わせる
MIDIだけでなくセンサーとも組み合わせて
音をコントロールしたい
•

方法1:Arduinoと組み合わせる
•

問題点
•

シリアル通信に時間がかかる

•

システムが大きくなる

•

6コ以上センサーが繋げない、10ビット以上の解...
MIDIだけでなくセンサーとも組み合わせて
音をコントロールしたい
•

方法2:Raspberry PiのGPIO (General Propose Input Output)を使う
GPIOで何ができるの?
•

Arduinoで出来る事が大体できます
例えば….

LED点灯

サーボ制御

LCD表示
Gertboard
•

RaspberryPiのGPIOをフルに利用してハードウェアを開
発したい人のための拡張ボード

https://www.sparkfun.com/products/11773
GPIOで出来ない事

•

RaspPiにADC (アナログ・デジタルコンバーター)はない
ため電圧を読み取る事ができない

外部ADCと接続する必要がある
手に入りやすいADC

•

ADC0831

MCP3208
300円(秋葉原・秋月電子通商)
GPIOをプログラムするには
•

GPIOに関する網羅的な情報
•

•

http://elinux.org/RPi_Low-level_peripherals

C、Python、Ruby、Perl、Javaなど様々な言語でGPIO
を操...
SPIとは
•

Serial Peripheral Interfaceの略

•

IC間の通信によく使われる規格。I2Cに比べて高速
CS
CLK
RaspPi

MOSI

DI

MISO

DO

ADC
SPIとは
•

複数のチップを繋ぐ事も可能なので、チャンネル数を
好きなだけ増やすことも可能
ADC

RaspPi
ADC
SCL, DO, DIバスは共有可能
Wiring Pi
•

ArduinoライクなRaspberryPi用Cライブラリ
ライブラリの提供する機能
- UART
- LCD
- PWM
- SPI
- I2C
作者のGordon Drogon氏

ダウンロードとインストール
ht...
外部ADCとSPI接続する例

ADCはTIのADC0831を使用
ADCの値をWiringPiを利用して取得する
#include
#include
#include
#include

!

<wiringPi.h>
<wiringPiSPI.h>
<stdio.h>
<unistd.h>

adc0831...
#include "m_pd.h"
#include "wiringPi.h"
#include "wiringPiSPI.h"
#define CS 12

!
static
!

t_class *getspi_class;

typede...
エクスターナル・オブジェクトの
プログラミング方法の詳細
•

IOhannes Zmölgnigによるチュートリアル
•

•

http://pdstatic.iem.at/externals-HOWTO/

美山千香士「Pure Data...
まとめ
•

Pdは小型低価格コンピュータRaspberryPi上で動く

•

Satellite CCRMAを使うと簡単にPdをRaspPiの上で動かせる

•

MIDIキーボードやArduinoとRaspberryPiの組み合わせもOK...
Upcoming SlideShare
Loading in …5
×

Raspberry PiとPdでオリジナルのシンセを作る

16,451 views

Published on

Raspberry PiとPdを組み合わせて、小さな自作楽器を作る方法を説明します。

Published in: Education

Raspberry PiとPdでオリジナルのシンセを作る

  1. 1. Raspberry PiとPdでオリジナルのシンセを作る 美山千香士 ドイツ/ケルン音楽舞踏大学講師 ケルンメディア大学フェロー スイス/チューリッヒ芸術大学非常勤講師 チューリッヒICST研究員
  2. 2. Github 本日お見せするパッチ プログラムはGitHubに公開しています。 https://github.com/chikashimiyama/pdj2
  3. 3. Demo ! RaspberryPi+Pd+MIDIキーボード+赤外線センサー によるミニシンセ
  4. 4. Raspberry Piとは • Raspberry Pi Foundationによる超小型コンピュータ • Arm ベースのCPU (Linuxが動かせる) • 512MB のRAM • 1x Audio out • HDMI/Compositeによる映像出力 • USB x2 • GPIOピン
  5. 5. Raspberry PiでPd-extendedを動かすには • Satelite CCRMAをインストールする • Satelite CCRMAはスタンフォード大学の開発してい るRaspberry Pi用のLinuxディストリビューション • Pd-extended、Arduino、Faust、ChucK、Jack等のク リエーティブ・コーディング用のソフトウェアが予 めインストールされている https://ccrma.stanford.edu/~eberdahl/satellite/
  6. 6. Xフォワーディング • RaspberryPi本体にマウス、キーボード、ディスプレイを繋 がなくとも、他のコンピュータからRaspberryPiをEthernet 経由で操作し、Pdのプログラミングをする事が可能 Pdプログラミング 音 Ethernet
  7. 7. MIDIも繋げるの? • 多くのUSB-MIDI機器はRaspPiが自動的に認識する Pdパッチと組み合わせれば 自作のミニシンセが簡単に出来る! USB
  8. 8. 音質をもっと良くしたい • USBオーディオ・インターフェースを使う Creative Media Sound Blaster Play ・但しオーディオインターフェースを使うと、サンプル・レートが決め打ち(44.1k)になる ・USBバスパワーには限界がある
  9. 9. MIDIだけでなくセンサーとも組み合わせて 音をコントロールしたい • 方法1:Arduinoと組み合わせる
  10. 10. MIDIだけでなくセンサーとも組み合わせて 音をコントロールしたい • 方法1:Arduinoと組み合わせる • 問題点 • シリアル通信に時間がかかる • システムが大きくなる • 6コ以上センサーが繋げない、10ビット以上の解像度が 得られない • Arduinoに電力供給 しなければならない
  11. 11. MIDIだけでなくセンサーとも組み合わせて 音をコントロールしたい • 方法2:Raspberry PiのGPIO (General Propose Input Output)を使う
  12. 12. GPIOで何ができるの? • Arduinoで出来る事が大体できます 例えば…. LED点灯 サーボ制御 LCD表示
  13. 13. Gertboard • RaspberryPiのGPIOをフルに利用してハードウェアを開 発したい人のための拡張ボード https://www.sparkfun.com/products/11773
  14. 14. GPIOで出来ない事 • RaspPiにADC (アナログ・デジタルコンバーター)はない ため電圧を読み取る事ができない 外部ADCと接続する必要がある
  15. 15. 手に入りやすいADC • ADC0831 MCP3208 300円(秋葉原・秋月電子通商)
  16. 16. GPIOをプログラムするには • GPIOに関する網羅的な情報 • • http://elinux.org/RPi_Low-level_peripherals C、Python、Ruby、Perl、Javaなど様々な言語でGPIO を操作するプログラムを書くことが可能
  17. 17. SPIとは • Serial Peripheral Interfaceの略 • IC間の通信によく使われる規格。I2Cに比べて高速 CS CLK RaspPi MOSI DI MISO DO ADC
  18. 18. SPIとは • 複数のチップを繋ぐ事も可能なので、チャンネル数を 好きなだけ増やすことも可能 ADC RaspPi ADC SCL, DO, DIバスは共有可能
  19. 19. Wiring Pi • ArduinoライクなRaspberryPi用Cライブラリ ライブラリの提供する機能 - UART - LCD - PWM - SPI - I2C 作者のGordon Drogon氏 ダウンロードとインストール https://projects.drogon.net/raspberry-pi/wiringpi/ バイナリは含まれないが、 コンパイルはスクリプトがあるので簡単にできる
  20. 20. 外部ADCとSPI接続する例 ADCはTIのADC0831を使用
  21. 21. ADCの値をWiringPiを利用して取得する #include #include #include #include ! <wiringPi.h> <wiringPiSPI.h> <stdio.h> <unistd.h> adc0831.c int main(void){ int spiCh = 1; unsigned char data[2]; int spi = wiringPiSPISetup(spiCh, 500000); ! ! ! } wiringPiSetup(); pinMode(12, OUTPUT); digitalWrite(12, HIGH); for(;;){ int res; unsigned char value; digitalWrite(12, LOW); res = wiringPiSPIDataRW(spiCh, data, 2); digitalWrite(12, HIGH); value = (data[0] << 2) + (data[1] >> 6); printf("data:%dn", value); usleep(10000); } return 0; Arduinoライクな プログラムが可能
  22. 22. #include "m_pd.h" #include "wiringPi.h" #include "wiringPiSPI.h" #define CS 12 ! static ! t_class *getspi_class; typedef struct _getspi { t_object x_obj; t_outlet *x_outlet; unsigned char data[2]; } t_getspi; オブジェクトの保持するデータ ! ! void getspi_bang(t_getspi *x){ int res; unsigned char value; digitalWrite(CS, LOW); res = wiringPiSPIDataRW(1, &x->data[0], 2); digitalWrite(CS, HIGH); value = (x->data[0] << 2) + (x->data[1] >> 6); outlet_float(x->x_outlet, (float)value); } bangが送られてきた時に 実行される関数 ! void *getspi_new(void){ int spi = wiringPiSPISetup(1, 500000); wiringPiSetup(); pinMode(CS, OUTPUT); digitalWrite(CS, HIGH); if(spi == -1){ post("cannot initialize SPIn"); } } オブジェクトが作られた時に 実行される関数 t_getspi *x = (t_getspi *)pd_new(getspi_class); x->x_outlet = outlet_new(&x->x_obj, gensym("float")); return (void *)x; ! void getspi_setup(void){ getspi_class = class_new(gensym("getspi"), (t_newmethod)getspi_new, 0, sizeof(t_getspi), CLASS_DEFAULT, 0); class_addbang(getspi_class, getspi_bang); } Pdにオブジェクトを登録する関数
  23. 23. エクスターナル・オブジェクトの プログラミング方法の詳細 • IOhannes Zmölgnigによるチュートリアル • • http://pdstatic.iem.at/externals-HOWTO/ 美山千香士「Pure Dataチュートリアル&リファレンス」  第20章
  24. 24. まとめ • Pdは小型低価格コンピュータRaspberryPi上で動く • Satellite CCRMAを使うと簡単にPdをRaspPiの上で動かせる • MIDIキーボードやArduinoとRaspberryPiの組み合わせもOK • RaspBerryPiにはGPIOがあり、電子工作との相性も良い • 外部ADCとGPIOをSPIで通信させて、Arduinoナシで独自楽器を作ることも可能 • GPIOの操作にはWiringPiというライブラリがオススメ • WiringPiを組み込んだCプログラムをPdのエクスターナルオブジェクトとして実装 することも可能

×