SlideShare a Scribd company logo
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

•

HDMI/Compositeによる映像出力

•

USB x2

•

GPIOピン
Raspberry PiでPd-extendedを動かすには
•

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

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

•

Pd-extended、Arduino、Faust、ChucK、Jack等のク
リエーティブ・コーディング用のソフトウェアが予
めインストールされている
https://ccrma.stanford.edu/~eberdahl/satellite/
Xフォワーディング
•

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

Pdプログラミング

音
Ethernet
MIDIも繋げるの?
•

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

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

Creative Media
Sound Blaster Play

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

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

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

問題点
•

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

•

システムが大きくなる

•

6コ以上センサーが繋げない、10ビット以上の解像度が
得られない

•

Arduinoに電力供給 しなければならない
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氏

ダウンロードとインストール
https://projects.drogon.net/raspberry-pi/wiringpi/
バイナリは含まれないが、
コンパイルはスクリプトがあるので簡単にできる
外部ADCとSPI接続する例

ADCはTIのADC0831を使用
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ライクな
プログラムが可能
#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にオブジェクトを登録する関数
エクスターナル・オブジェクトの
プログラミング方法の詳細
•

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

•

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

美山千香士「Pure Dataチュートリアル&リファレンス」 
第20章
まとめ
•

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

•

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

•

MIDIキーボードやArduinoとRaspberryPiの組み合わせもOK

•

RaspBerryPiにはGPIOがあり、電子工作との相性も良い

•

外部ADCとGPIOをSPIで通信させて、Arduinoナシで独自楽器を作ることも可能

•

GPIOの操作にはWiringPiというライブラリがオススメ

•

WiringPiを組み込んだCプログラムをPdのエクスターナルオブジェクトとして実装
することも可能

More Related Content

What's hot

12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
Yuki Tamura
 
CVE、JVN番号の取得経験者になろう!
CVE、JVN番号の取得経験者になろう!CVE、JVN番号の取得経験者になろう!
CVE、JVN番号の取得経験者になろう!
kazkiti
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
Yoshitaka Seo
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
slankdev
 
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
mmitti
 
Prius Hack 「カーハッカーズハンドブック」をラズパイで試してみた
Prius Hack 「カーハッカーズハンドブック」をラズパイで試してみたPrius Hack 「カーハッカーズハンドブック」をラズパイで試してみた
Prius Hack 「カーハッカーズハンドブック」をラズパイで試してみた
NoboruTakahashi3
 
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Shinya Takamaeda-Y
 
深層学習を利用した音声強調
深層学習を利用した音声強調深層学習を利用した音声強調
深層学習を利用した音声強調
Yuma Koizumi
 
素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe 素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe
Junpei Tsuji
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
MITSUNARI Shigeo
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
 
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
智啓 出川
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析
euphoricwavism
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ryos36
 

What's hot (20)

12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
 
CVE、JVN番号の取得経験者になろう!
CVE、JVN番号の取得経験者になろう!CVE、JVN番号の取得経験者になろう!
CVE、JVN番号の取得経験者になろう!
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
 
Prius Hack 「カーハッカーズハンドブック」をラズパイで試してみた
Prius Hack 「カーハッカーズハンドブック」をラズパイで試してみたPrius Hack 「カーハッカーズハンドブック」をラズパイで試してみた
Prius Hack 「カーハッカーズハンドブック」をラズパイで試してみた
 
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
 
深層学習を利用した音声強調
深層学習を利用した音声強調深層学習を利用した音声強調
深層学習を利用した音声強調
 
素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe 素数の分解法則(フロベニウスやばい) #math_cafe
素数の分解法則(フロベニウスやばい) #math_cafe
 
GoogleのSHA-1のはなし
GoogleのSHA-1のはなしGoogleのSHA-1のはなし
GoogleのSHA-1のはなし
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
 

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

Raspberry Pi入門
Raspberry Pi入門Raspberry Pi入門
Rasberrypi 2013-08-17
Rasberrypi 2013-08-17Rasberrypi 2013-08-17
Rasberrypi 2013-08-17
Hashimoto Hisashi
 
131106 03 i-rex2013
131106 03 i-rex2013131106 03 i-rex2013
131106 03 i-rex2013openrtm
 
Raspberry PiとノートPCを繋げよう
Raspberry PiとノートPCを繋げようRaspberry PiとノートPCを繋げよう
Raspberry PiとノートPCを繋げよう
VirtualTech Japan Inc./Begi.net Inc.
 
ロボットシステム学2015年第7回
ロボットシステム学2015年第7回ロボットシステム学2015年第7回
ロボットシステム学2015年第7回
Ryuichi Ueda
 
2013 summercamp 03
2013 summercamp 032013 summercamp 03
2013 summercamp 03openrtm
 
Dart on Raspberry Pi
Dart on Raspberry PiDart on Raspberry Pi
Dart on Raspberry Pi
Kasai Nobuhiro
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)
 
Morinezumiiii 20150425-bluetooth
Morinezumiiii 20150425-bluetoothMorinezumiiii 20150425-bluetooth
Morinezumiiii 20150425-bluetooth
Amuro Nishizawa
 
OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」
OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」
OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」
Yuriko IKEDA
 
はじめようRaspberry Pi
はじめようRaspberry PiはじめようRaspberry Pi
はじめようRaspberry Pi
VirtualTech Japan Inc./Begi.net Inc.
 
Raspberry pi 2
Raspberry pi 2Raspberry pi 2
Raspberry pi 2
arappocaro jp
 

Similar to Raspberry PiとPdでオリジナルのシンセを作る (12)

Raspberry Pi入門
Raspberry Pi入門Raspberry Pi入門
Raspberry Pi入門
 
Rasberrypi 2013-08-17
Rasberrypi 2013-08-17Rasberrypi 2013-08-17
Rasberrypi 2013-08-17
 
131106 03 i-rex2013
131106 03 i-rex2013131106 03 i-rex2013
131106 03 i-rex2013
 
Raspberry PiとノートPCを繋げよう
Raspberry PiとノートPCを繋げようRaspberry PiとノートPCを繋げよう
Raspberry PiとノートPCを繋げよう
 
ロボットシステム学2015年第7回
ロボットシステム学2015年第7回ロボットシステム学2015年第7回
ロボットシステム学2015年第7回
 
2013 summercamp 03
2013 summercamp 032013 summercamp 03
2013 summercamp 03
 
Dart on Raspberry Pi
Dart on Raspberry PiDart on Raspberry Pi
Dart on Raspberry Pi
 
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
 
Morinezumiiii 20150425-bluetooth
Morinezumiiii 20150425-bluetoothMorinezumiiii 20150425-bluetooth
Morinezumiiii 20150425-bluetooth
 
OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」
OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」
OSC2013京都スライド「超小型ARMコンピュータRaspberry Piでできること」
 
はじめようRaspberry Pi
はじめようRaspberry PiはじめようRaspberry Pi
はじめようRaspberry Pi
 
Raspberry pi 2
Raspberry pi 2Raspberry pi 2
Raspberry pi 2
 

More from Chikashi Miyama

Software2 SS2016 2
Software2 SS2016 2Software2 SS2016 2
Software2 SS2016 2
Chikashi Miyama
 
Software2 SS2016 1
Software2 SS2016 1Software2 SS2016 1
Software2 SS2016 1
Chikashi Miyama
 
SuperCollider SS2016 5
SuperCollider SS2016 5SuperCollider SS2016 5
SuperCollider SS2016 5
Chikashi Miyama
 
SuperCollider SS2016 4
SuperCollider SS2016 4SuperCollider SS2016 4
SuperCollider SS2016 4
Chikashi Miyama
 
SuperCollider SS2016 3
SuperCollider SS2016 3SuperCollider SS2016 3
SuperCollider SS2016 3
Chikashi Miyama
 
SuperCollider SS2016 1
SuperCollider SS2016 1SuperCollider SS2016 1
SuperCollider SS2016 1
Chikashi Miyama
 
SuperCollider SS2016 2
SuperCollider SS2016 2SuperCollider SS2016 2
SuperCollider SS2016 2
Chikashi Miyama
 

More from Chikashi Miyama (7)

Software2 SS2016 2
Software2 SS2016 2Software2 SS2016 2
Software2 SS2016 2
 
Software2 SS2016 1
Software2 SS2016 1Software2 SS2016 1
Software2 SS2016 1
 
SuperCollider SS2016 5
SuperCollider SS2016 5SuperCollider SS2016 5
SuperCollider SS2016 5
 
SuperCollider SS2016 4
SuperCollider SS2016 4SuperCollider SS2016 4
SuperCollider SS2016 4
 
SuperCollider SS2016 3
SuperCollider SS2016 3SuperCollider SS2016 3
SuperCollider SS2016 3
 
SuperCollider SS2016 1
SuperCollider SS2016 1SuperCollider SS2016 1
SuperCollider SS2016 1
 
SuperCollider SS2016 2
SuperCollider SS2016 2SuperCollider SS2016 2
SuperCollider SS2016 2
 

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