Samplerbox basierend auf Raspberry PI – 2020 lohnt sich das noch?

Samplerbox hatte ich schon mit dem Raspberry-PI, gefühlt 2010 getestet. Es war sicher 2 oder 3 Jahre später aber der Sampleplayer basierend auf Raspberry 2 lief eher mit Fehlern und die Klangqualität ware eher sehr bescheiden.

Samplerbox ist eine Software – oder besser schon “Betriebssystem”, das man als Boot-Image auf eine SD-Karte kopiert und dann diese in den Raspberry-Pi steckt.
In die USB-Ports des Raspberry-PI steckt man noch ein USB-MIDI-Keyboard, eine USB-Soundcard und einen USB-Stick mit Sounds. Nach dem Booten kann man dann die Sounds, die auf dem USB-Stick gespeichert sind auf dem MIDI-KEyboard abspielen.

Technisch war Samplerbox als einfacher mobiler Keyboard-Expander angesetzt. Dank gut gesampelter Piano-Sounds scheint das Projekt aber nun eher bei Usern zum Upgrade von Homepianos eingesetzt zu werden.

Im Vergleich zu einem vollwertigen Sampler, – so wie es sie früher in den 90ern mal gab, fehlen der Samplerbox viele Funktionen:

  • Samplen kann man damit nicht, nur Sounds wiedergeben
  • Es gibt keine ADSR-Hüllkurve, sondern nur eine Releasetime
  • 16Bit, und somit kann es bei vollem “Gain” zu Verzerrungen kommen
  • Kein integrierter Sample-Editor

Auf der Plusseite haben wir aber 2020 mit der Version von Hans ( http://homspace.xs4all.nl/homspace/samplerbox/SBbuild.html ) nun eine stabile Version, die auch schon eine größere Liste von Effekten kennt: Lowpass, Freeverb, Delay, WahWah.
Die Version von Hans läuft auch nach Stunden und wildem Wechsel des USB-Sticks noch stabil!

Die Version von Hans unterstützt auch ein einfaches optionales GUI, mit 2 Buttons, einem Display (16x2LCD oder SPI-OLED), DIN-Midi und 2 LEDs.

Ich habe mir eine einfache PCM5180-Platine bei Amazon bestellt und diese als Hifiberry-Soundcard installiert, ein LCD-Display und 2 Buttons verbaut. Da ich noch keinen 3D-Drucker habe, habe ich ein Gehäuse aus Guttagliss PHoobycolor – Platten gebaut. .. das ging auch in wenigen Minuten.

Anders als angegeben müssen nur die Datenleitungen D4 bis D7 des LCDs mit GPIO-Pins verbunden werden. Die final ausgewählte Belegung wird in einer Configdatei (configuration.txt) auf der SD-Card definiert. Somit können auch vorhandene LCDs und Hifiberry weiter verwendet werden.

Sounds habe ich mit der Akai MPC erstellt und dann auf den USB-Stick rüber kopiert und somit stehen diese nun mit einer Polyphonie von 80 Sounds zur Verfügung.

Spaß machen die A-Piano und E-Piano-Sounds, bei denen man keine besonderen ADSR-Hüllkurven erwartet. Synth-Sounds klingen sehr statisch, denn hier erwartet man eben Sounds, die genau nochmal eine Veränderung zeigen, wenn man länger drückt, fester drückt (Aftertouch) oder los lässt.

Für alle, die einen einfachen MIDI-Expander, – Sampleplayer für Keyboard-Sounds, Drum-Sounds oder Loops suchen und schon einen Raspberry-Pi ab Modell 3 haben, sollten Samplerbox nochmal testen.

Ich werde meinen Raspberry PI noch mit einem DIN-MIDI-Port ausstatten und einen Arduino als Sequencer hinzufügen und zu meinem kleinen Volca-Beat synchronisieren.

Links:

http://homspace.xs4all.nl/homspace/samplerbox/SBbuild.html

Script to sample down the sounds of a SF2-File
https://github.com/adrianhoehne/Sf2_Batch_Recording/blob/master/Sf2_Batch_Recording

Trick zur Sample-Convertierung:
Unter MacOSX gibt e snatürlich viele Tools um vorhandene Sounds in einem Verzeichnis auf die richtige Sample-Frequenz und die richtige Bitgröße zu bringen. Mit dem Tool “SOX” geht das auch in der CLI/Bash:
for file in *.wav; do ./sox “$file” -r 44100 -b 16 44100/”$file” -V; done

Erweiterung zum Samplen gibt es lieder noch nicht fertig. Aber es gibt ein Script, welches die Basics zum Samplen abdeckt: https://www.samplerbox.org/forum/444

import RPi.GPIO as gpio 
from recorder import Recorder 
gpio.setmode(gpio.BCM)  

class ButtonRecorder(object): 
    def __init__(self, filename): 
        self.filename = filename 
        gpio.setup(23, gpio.IN, pull_up_down=gpio.PUD_UP) 
        self.rec = Recorder(channels=2) 

    def start(self): 
        gpio.add_event_detect(23, gpio.FALLING, callback=self.falling, bouncetime=10) 

    def rising(self, channel): 
        gpio.remove_event_detect(23) 
        print 'Button up' 
        gpio.add_event_detect(23, gpio.FALLING, callback=self.falling, bouncetime=10) 
        self.recfile.stop_recording() 
        self.recfile.close() 

    def falling(self, channel): 
        gpio.remove_event_detect(23) 
        print 'Button down' 
        gpio.add_event_detect(23, gpio.RISING, callback=self.rising, bouncetime=10) 
        self.recfile = self.rec.open(self.filename, 'wb')    
        self.recfile.start_recording() 

rec = ButtonRecorder('36.wav')
rec.start() 

try: 
    raw_input() 

except KeyboardInterrupt: 
    pass 

gpio.cleanup()

Comments are closed.