ファファファファーン
前回まで
サンプラー買うお金がないので、Raspberry Piで作っています。
誰か買ってください。
Akai Professional ビートパット・シンセエンジン・タッチディスプレイ搭載 スタンドアローン/ドラムマシン/サンプラー/MIDIコントローラー MPC One
- 発売日: 2020/03/17
- メディア: エレクトロニクス
ハードボタンがなきゃサンプラーじゃない
とりあえず、Raspberry PiとSpeaker pHatとPythonで好きな音を再生・停止できるところまでできました。
あとは、ボタンを複数揃えて、ボタンに違う音をアサインして、ボタンを押して音を出す。これがしたいんですよねぇ。
とりあえず、部屋に転がっていた電子工作用のボタンをいくつか用意して、GPIOとGNDをつないでみました。
これをRaspberry Piに接続。Python側でプルアップ抵抗を有効化して、ボタン押下を検知。それをトリガーに音を鳴らすコードを書いてみました。ボタンを連打したときのために、再生中の音を止める実装も入れてみました。
いざ演奏
とりあえず、エアホーンだけですが。
#RaspberryPi でサンプラー作ってる。 pic.twitter.com/4CWlLvTRpI
— ポキオ (@pokiiio) October 14, 2020
こんな感じです。
- ボタンの押下時の音がうるさい
- レスポンスが遅い
など、色々思うところがありますが、とりあえず色々な音源で試してみたいですねぇ。
コードはこちら
import RPi.GPIO as GPIO import pygame.mixer import time GPIO.setmode(GPIO.BOARD) pin1 = 15 pin2 = 11 pin3 = 29 pin4 = 37 pin5 = 18 pin6 = 16 GPIO.setup(pin1, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin2, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin3, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin4, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin5, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(pin6, GPIO.IN, pull_up_down=GPIO.PUD_UP) input_state1 = True input_state2 = True input_state3 = True input_state4 = True input_state5 = True input_state6 = True pygame.mixer.init() sound1 = pygame.mixer.Sound("/home/pi/Music/sound1.wav") sound2 = pygame.mixer.Sound("/home/pi/Music/sound2.wav") sound3 = pygame.mixer.Sound("/home/pi/Music/sound3.wav") sound4 = pygame.mixer.Sound("/home/pi/Music/sound4.wav") sound5 = pygame.mixer.Sound("/home/pi/Music/sound5.wav") sound6 = pygame.mixer.Sound("/home/pi/Music/sound6.wav") while True: if GPIO.input(pin1) == False and input_state1 == True: print('Button1 Pressed') input_state1 = False sound1.stop() sound1.play() else: input_state1 = GPIO.input(pin1) if GPIO.input(pin2) == False and input_state2 == True: print('Button2 Pressed') input_state2 = False sound2.stop() sound2.play() else: input_state2 = GPIO.input(pin2) if GPIO.input(pin3) == False and input_state3 == True: print('Button3 Pressed') input_state3 = False sound3.stop() sound3.play() else: input_state3 = GPIO.input(pin3) if GPIO.input(pin4) == False and input_state4 == True: print('Button4 Pressed') input_state4 = False sound4.stop() sound4.play() else: input_state4 = GPIO.input(pin4) if GPIO.input(pin5) == False and input_state5 == True: print('Button5 Pressed') input_state5 = False sound5.stop() sound5.play() else: input_state5 = GPIO.input(pin5) if GPIO.input(pin6) == False and input_state6 == True: print('Button6 Pressed') input_state6 = False sound6.stop() sound6.play() else: input_state6 = GPIO.input(pin6) if not (input_state1 and input_state2 and input_state3 and input_state4 and input_state5 and input_state6): time.sleep(0.05) print('block')