Androidのメモとか

ポキオの日記です。今日も遅延してない。

Raspberry Piでサンプラーを作ってファファファファーン

ファファファファーン

ポキオ Raspberry Pi Speaker pHat サンプラー

前回まで

サンプラー買うお金がないので、Raspberry Piで作っています。

relativelayout.hatenablog.com

relativelayout.hatenablog.com

誰か買ってください。

ハードボタンがなきゃサンプラーじゃない

とりあえず、Raspberry PiとSpeaker pHatPythonで好きな音を再生・停止できるところまでできました。

あとは、ボタンを複数揃えて、ボタンに違う音をアサインして、ボタンを押して音を出す。これがしたいんですよねぇ。

ポキオ Raspberry Pi Speaker pHat サンプラー

とりあえず、部屋に転がっていた電子工作用のボタンをいくつか用意して、GPIOとGNDをつないでみました。

ポキオ Raspberry Pi Speaker pHat サンプラー

これをRaspberry Piに接続。Python側でプルアップ抵抗を有効化して、ボタン押下を検知。それをトリガーに音を鳴らすコードを書いてみました。ボタンを連打したときのために、再生中の音を止める実装も入れてみました。

いざ演奏

とりあえず、エアホーンだけですが。

こんな感じです。

  • ボタンの押下時の音がうるさい
  • レスポンスが遅い

など、色々思うところがありますが、とりあえず色々な音源で試してみたいですねぇ。

コードはこちら

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')
「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。