SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
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のエクスターナルオブジェクトとして実装
することも可能

Weitere ähnliche Inhalte

Was ist angesagt?

僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
Takuya ASADA
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
 
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
智啓 出川
 

Was ist angesagt? (20)

僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみたFPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
 
3D CNNによる人物行動認識の動向
3D CNNによる人物行動認識の動向3D CNNによる人物行動認識の動向
3D CNNによる人物行動認識の動向
 
[DL輪読会]SlowFast Networks for Video Recognition
[DL輪読会]SlowFast Networks for Video Recognition[DL輪読会]SlowFast Networks for Video Recognition
[DL輪読会]SlowFast Networks for Video Recognition
 
【DL輪読会】マルチモーダル 基盤モデル
【DL輪読会】マルチモーダル 基盤モデル【DL輪読会】マルチモーダル 基盤モデル
【DL輪読会】マルチモーダル 基盤モデル
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
 
Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
強化学習の分散アーキテクチャ変遷
強化学習の分散アーキテクチャ変遷強化学習の分散アーキテクチャ変遷
強化学習の分散アーキテクチャ変遷
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
Word Tour: One-dimensional Word Embeddings via the Traveling Salesman Problem...
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
論文紹介:Grad-CAM: Visual explanations from deep networks via gradient-based loca...
論文紹介:Grad-CAM: Visual explanations from deep networks via gradient-based loca...論文紹介:Grad-CAM: Visual explanations from deep networks via gradient-based loca...
論文紹介:Grad-CAM: Visual explanations from deep networks via gradient-based loca...
 
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
 
SIGNATE 鰹節コンペ2nd Place Solution
SIGNATE 鰹節コンペ2nd Place SolutionSIGNATE 鰹節コンペ2nd Place Solution
SIGNATE 鰹節コンペ2nd Place Solution
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
 
東京大学2021年度深層学習(Deep learning基礎講座2021) 第8回「深層学習と自然言語処理」
東京大学2021年度深層学習(Deep learning基礎講座2021) 第8回「深層学習と自然言語処理」東京大学2021年度深層学習(Deep learning基礎講座2021) 第8回「深層学習と自然言語処理」
東京大学2021年度深層学習(Deep learning基礎講座2021) 第8回「深層学習と自然言語処理」
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 

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

131106 03 i-rex2013
131106 03 i-rex2013131106 03 i-rex2013
131106 03 i-rex2013
openrtm
 
2013 summercamp 03
2013 summercamp 032013 summercamp 03
2013 summercamp 03
openrtm
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
mmitti
 

Ähnlich wie Raspberry PiとPdでオリジナルのシンセを作る (13)

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でできること」
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
 
はじめようRaspberry Pi
はじめようRaspberry PiはじめようRaspberry Pi
はじめようRaspberry Pi
 
Raspberry pi 2
Raspberry pi 2Raspberry pi 2
Raspberry pi 2
 

Mehr von 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でオリジナルのシンセを作る