coscup 2016: 開源軟硬體實做全套電子鼓(python + rpi)
TRANSCRIPT
PyDrum: 開源軟硬體實做電子鼓
使用 Raspberry Pi + Python
洪任諭 (PCMan)@COSCUP 2016E-mail: [email protected]
2016-08-20
2
講者簡介
● Appier Backend Engineer● 台大資訊工程研究所畢業● 前榮總風濕免疫科醫師● 陽明大學醫學系畢業● 13 年自由軟體開發
– LXDE / LXQt 桌面環境– PIME 輸入法平台– 新酷音輸入法 windows port
– PCMan BBS client 全系列– IE Tab Firefox 外掛
3
http://www.yamahamusic.com.tw/instrument/drums/drums%20manual/drums-manual-101.htm
YAMAHA Drumkit
4
學音樂的孩子不會變壞只是 ...
5
夢想是昂貴的 ...
http://tw.yamaha.com/zh/products/musical-instruments/drums/el-drums/drumsets/dtx900_series/dtx900k/?mode=model
YAMAHA DTX series
官網售價 NTD: 225,000 元
6
學音樂程式的孩子不會變壞Maker 魂發作!
7
初代 PyDrum!
8
這才是完全體 !
9
沒圖沒真相 ...
1: https://youtu.be/ZGUp40ab1Dk
2: https://youtu.be/yVq7tDUDeAA
Demo: 台大吉他社 汪汪
10
硬體材料
● Raspberry Pi 2 (~NT.1300↓)● ADC: Microchip MCP 3008 (~NT.90)● RS SMD Diaphragm External Piezo Buzzer, 3700 → 4700
Hz (NT.18) x 7● 2W 1MΩ 電阻 (NT. 2) x 7● Linear Hall effect sensor (~NT. 80)● 強力磁鐵 (~NT.40)
● 麵包板 : (~NT.80) 、各種線材…● 很多洋芋片 (~NT. 65) x 6
11
軟體環境
● 程式部份:– Python3
– Spidev ( 透過 Serial Peripheral Interface 讀取 ADC)
– Pygame ( 播放音效 )
● 鼓音色檔案– 取自 Hydrogen 軟體 (GPL’d)
– http://www.hydrogen-music.org/hcms/
– 轉檔成 ogg
12
Piezo Element
● 壓電材質– 輸入電訊號,產生形變 / 振動 → 蜂鳴器– 輸入聲音 / 振動,產生電壓 → sensor
● 類比訊號 (Raspberry Pi 無法讀取 )
● 類似電容放電
13
Analogue to Digital Converter (ADC)
● 類比訊號 ( 電壓值 ) 轉數位訊號● Microchip MCP3008 (10-bit, SPI 界面 )
類比輸入
數位接地
電源供應 (RPi: 5V)
參考電壓 (ADC=VCHx
/ VREF
* 1024)
類比接地SPI clock
SPI chip select ( 接 RPi SPI_CE0)
SPI 輸入 ( 來自 RPi MOSI 的輸入 )
SPI 輸出 ( 轉換結果送到 RPi MISO)
14R
aspb
erry Pi Mod
el 2 v1.1©
Rasp
berry Pi 2014
http
://ww
w.raspb
errypi.org
Power
HD
MI
Audio
USB 2x USB 2x
ETHERNET
DSI (DISPLAY)
CSI (CAMERA)
GPIO
11
55
1010
1515
2020
2525
3030
3535
4040
4545
5050
5555
6060
A A
B B
C C
D D
E E
F F
G G
H H
I I
J J
MCP3008
SC70
1 25
34
crash
Hihat padelbass drum
ride
floor tomhihat
snare
tom
Pydrum - https://github.com/PCMan/pydrumCopyright (C) 2016 Hong Jen Yee (PCMan) <[email protected]>
動手接線 !
15
訊號分析
● 用 busy loop 連續讀取 ADC– 平均 sampling rate 約 4000-5000 Hz
● 頻譜分析– 5-order moving average ( 減低雜訊 )
– 傅立葉轉換 → 頻寬約 200Hz
– 根據 sampling theorem → 取樣率至少 400 Hz
● 嘗試下修 sampling rate– 省電– 200 Hz 會破壞波形,但偵測敲擊仍堪用– 副作用:減少高頻雜訊 ?
16
訊號分析
原始訊號波形 傅立葉轉換 ( 頻譜 )
時間 (sec) 頻率 (Hz)
200Hz
17
取樣率 : 200Hz
Threshold: 100
18
( 近似 ) 固定時間取樣
SAMPLING_RATE = 200 # 目標 : 一秒讀 ADC 200 次sampling_period = 1.0 / SAMPLING_RATE # 每次取樣時間間隔wait_adjust = 0.0next_read_time = time.time() # 下次讀取 spi 的時間while True: read_time = time.time() # 這次讀取的時間 read_adc_value() # 從 ADC 讀取數值 wait_adjust = next_read_time – read_time # 修正誤差
# 估計下一次應該讀取的時間 next_read_time = read_time + sampling_period + wait_adjust
# 計算現在時間距離下一次讀取還有多久 wait_time = next_read_time - time.time()
if wait_time > 0: time.sleep(wait_time) # 等待下一次讀取
● RPi 無 realtime clock ,取樣速度忽快忽慢 ...
RPi2 實驗結果:平均取樣率 199.99 Hz
19
進化了 !
20
進化了 !
21
LIVE!
By: 餘弦杯 cos(☕) 樂團
22
23
特別致謝
● 勸世宗親會 (授權使用喵電感應 )
● 台大吉他社 汪汪 ( 測試及錄製 demo)
● 鼓手 : Jessie Mi
● 烏克麗麗 : penk (http://ukulele.design/)– 下午 14:15 R1議程 : 自己的樂器自己做
● Vocal: Dona
● COSCUP 全體人員
GitHubhttps://github.com/PCMan/pydrum