またファーンしてます。
前回まで
サンプラー買うお金がないので、Raspberry Piで作っています。
誰か買ってください。
Akai Professional ビートパット・シンセエンジン・タッチディスプレイ搭載 スタンドアローン/ドラムマシン/サンプラー/MIDIコントローラー MPC One
- 発売日: 2020/03/17
- メディア: エレクトロニクス
ボタンの押下音がうるさい件
やっぱりうるさいんですよね、ボタンを押したときの音が。
そこで、ボタンの代わりのインターフェイスを探すことに。で、押してダメならタッチでどうだ、ということで静電容量センサを使うことに。
モジュールのインターフェイスはi2cになっていて、RPi以外にもArduinoでも使えてしまうやつ。モジュールには10個の入力端子がついていて、触るなどして静電容量が変化を検知できるというわけです。
静電容量センサーでファファファファファーン
というわけで、このモジュールを使ってユーザーインターフェイスを作成。モジュールをブリキの板につないでボタンの代わりにしてみました。
こんな感じ。で、これでファファファファーンしてみました。
まぁまぁいいんじゃないですかねぇ。目的であったボタンの押下音はなくなりました。
ただ、今度目立ってきたのは「押したのに音がならないことがある」ということ。一難去ってまた一難。センサーが反応できていないのか、音を鳴らすプロセスが詰まってるのか…?なにはともあれ、本物のサンプラーに近づくのはなかなか難しいものですね。
コードはこちら
静電容量センサモジュールのライブラリ(adafruit_mpr121
)がPython3向けだったため、Python3で動作させています。
import pygame.mixer import time import board import busio import adafruit_mpr121 import threading i2c = busio.I2C(board.SCL, board.SDA) mpr121 = adafruit_mpr121.MPR121(i2c) input_state1 = False input_state2 = False input_state3 = False input_state4 = False input_state5 = False input_state6 = False 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") def play1(): sound1.stop() sound1.play() def play2(): sound2.stop() sound2.play() def play3(): sound3.stop() sound3.play() def play4(): sound4.stop() sound4.play() def play5(): sound5.stop() sound5.play() def play6(): sound6.stop() sound6.play() while True: if mpr121[0].value == True and input_state1 == False: print('Button1 Pressed') input_state1 = True threading.Thread(target=play1).start() else: input_state1 = mpr121[0].value if mpr121[2].value == True and input_state2 == False: print('Button2 Pressed') input_state2 = True threading.Thread(target=play2).start() else: input_state2 = mpr121[2].value if mpr121[4].value == True and input_state3 == False: print('Button3 Pressed') input_state3 = True threading.Thread(target=play3).start() else: input_state3 = mpr121[4].value if mpr121[7].value == True and input_state4 == False: print('Button4 Pressed') input_state4 = True threading.Thread(target=play4).start() else: input_state4 = mpr121[7].value if mpr121[9].value == True and input_state5 == False: print('Button5 Pressed') input_state5 = True threading.Thread(target=play5).start() else: input_state5 = mpr121[9].value if mpr121[11].value == True and input_state6 == False: print('Button6 Pressed') input_state6 = True threading.Thread(target=play6).start() else: input_state6 = mpr121[11].value