FloCafe
FloCafe is the free, local-first restaurant POS in the FloPOS ecosystem. Run orders, tables, kitchen display, and local data without a software subscription.
翻譯準備中
尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
A studio sidekick for the M-VAVE FM-1 running SLOOP: Bluetooth audio and MIDI, a mixer, recorder, sample editor and MIDI matrix. Works with most USB audio and MIDI devices.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A studio sidekick for the M-VAVE FM-1 pocket synth. Bluetooth audio and MIDI, a mixer, a recorder that keeps the MIDI too, a sample editor, meters and a MIDI matrix, with no computer needed once it's set up. By XOXO Audio Labs.
xoxoaudiolabs.com · The Pocket · The Studio · Try the web app (sample data, in your browser) · What's new
| The Studio | The Pocket |
|---|---|
| ▶ Studio tour (1:12, with sound) | ▶ Pocket demo (1:46, with sound) |
Both videos are drawn by the boxes' own screen code on a computer, with each button press or tap shown; they aren't filmed. Their audio is real: played on the FM-1s and recorded by the box.
It started as a way to add the Bluetooth that custom FM-1 firmware such as SLOOP leaves switched off, and grew from there. Plug it into the FM-1 by USB and run it from its own screen or from your phone.
| The Pocket | The Studio | |
|---|---|---|
| Computer | Raspberry Pi Zero W (Zero 2 W: should work, not tried yet) | Raspberry Pi 3 B+ |
| Screen and controls | A Waveshare Zero HAT: the 1.3" OLED, the 1.44" colour LCD or the 1.3" colour LCD (not tried yet); joystick and three keys | 3.5" 480×320 touchscreen, in SLOOP's style and colours |
| Battery | PiSugar 3 | PiSugar 3 Plus (5000 mAh) |
| Adds | Fits in a pocket | SLOOP and X0X running on the Studio itself, DJ decks, a sampler with SLOOP's sequencer and punch-in FX, a headphone jack with cue, a DAW control surface, four USB ports, Ethernet, HDMI out |
| Software | v2.13 | Studio v1.6, and newer work on main |
| More | Product page | Product page |
The installer works out which build it's on, and each build only shows what its hardware can do. What's been tried on the real boxes, and what hasn't yet: Tested on the real hardware.
The Pocket needs a Pi Zero with wireless (Zero W, Zero WH, Zero 2 W) for its Bluetooth, and a Waveshare Zero screen HAT with the joystick and three keys. Which boards, screens and OS versions are tested, which should work, and which won't: the setup guide's Compatibility. What Bluetooth does and doesn't do: Bluetooth.
Built one on different hardware, or had trouble? Tell us: run fm1-report on the box and paste what
it prints. Adding a part or a screen driver: HARDWARE.md.
.mid of what was played beside each take (tried on
the Studio), and Record parts for each source as its own file. Turn a take into a sample: trim, fade, normalize, reverse,
tune it to its note, ready to load into the FM-1.http://<the box's hostname>.local: live status, the mixer, the MIDI matrix, a
sample editor, your recordings and the library. Try it with sample data. ┌── Bluetooth audio ──▶ headphones / speaker
├◀── Bluetooth MIDI ──▶ keyboard / iPad / phone / Mac
FM-1 ◀── USB ──▶ Pocket/Studio ┤
(audio, MIDI, backups, ├◀── USB ────────────▶ USB MIDI keyboards, USB audio, a second FM-1
samples, firmware) ├◀── Wi-Fi/Ethernet ─▶ web app on your phone; a DAW (the Studio)
└── its own screen: meters, mixer, recorder, sample editor
Everything is in fm1-bt-bridge/. Its README covers what to buy,
flashing the SD card, installing, the controls and troubleshooting. In short:
scp -r fm1-bt-bridge [email protected]:~
ssh [email protected]
bash fm1-bt-bridge/install.sh
sudo reboot
Use the hostname you gave the box when you flashed its card (fm1bridge above; a Studio might be fm1studio).
It's ready about a minute after power-on.
Drawn by the Companion's own code on a computer (tools/render_screens.py).
| The Pocket (LCD) | The Pocket (OLED) | The Studio | |
|---|---|---|---|
| Home | |||
| MIDI routes | |||
| Meters | |||
| Sample editor |
| The Studio's sampler | The Studio's recorder | The Studio's mixer |
|---|---|---|
The Pocket's eleven meters on the LCD (joystick left from HOME; up/down changes meter, press records)
The Pocket's eleven meters on the OLED
The Studio's ten meters (MIXER > METERS; tap the meter for the next)
The Pocket's HOME in each theme (Settings › Theme on the LCD)
The latest of each box; every release in full: docs/CHANGELOG.md.
fm1-screen and fm1-report; an installer that checks the
Pi first; Settings opening with Mixer, MIDI routes, Sample editor, Sloop, FM-1 and Bluetooth.
(More).mid beside each take), the 808 KIT for the sampler, a
speaker that reconnects itself once, sources heard again at once after a short USB drop, eight Studio themes,
FM-1 ON STUDIO (map a controller onto SLOOP or X0X) and MIDI learn for the DJ decks (not tried with hardware).
(More)What each box has been seen doing for real. Everything else in What it does is built and has automated tests, but hasn't been tried on the real box yet: it's in the second list until it has.
A Pi Zero W on Raspberry Pi OS Lite (Trixie) with the Waveshare OLED HAT, later the Waveshare 1.44" LCD HAT on the Waveshare Ethernet/USB HUB HAT, and a PiSugar 3; FM-1s on SLOOP 2.7 and 2.8; a JBL Go 3; an M-VAVE SMK-37 (over Bluetooth MIDI, and over USB through an ASMedia ASM1074 hub, running Baud Girl next to two FM-1s).
Tested
fm1-screen and fm1-report on the real Pocket.Not tested on the real Pocket yet
A Pi 3 B+ on Raspberry Pi OS Lite (Trixie), the Hosyond 3.5" touchscreen and a PiSugar 3 Plus, with two FM-1s on SLOOP 2.8, an M-VAVE SMK-37 running Clipper and a Teenage Engineering K.O. Sidekick (EP-136) on its four USB ports, and a JBL Go 3. For the DJ decks: a Hercules DJControl Inpulse 200 MK2 (USB; its own sound card for the headphones), headphones on it, the JBL Go 3 as the master, and 37 MP3s (dubstep around 140 BPM, analysed in Serato DJ: its tags in them).
Tested
Not tested on the real Studio yet
.x0b from an FM-1 running X0X restored onto the
Studio's X0X, or the other way round.config/fm1-native-wifi step in the box README saves about a minute more).| Path | What it is |
|---|---|
fm1-bt-bridge/bridge.py | The app: screens, headphone pairing, audio routing and the mixer (PipeWire), keys |
fm1-bt-bridge/blemidi.py | Bluetooth LE MIDI (BlueZ), the FM-1's USB MIDI and USB keyboards, the clock, the MIDI matrix with its arp and chord memory, the metronome, in a process of its own |
fm1-bt-bridge/libui.py | The Sloop and FM-1 settings, recordings and their screens |
fm1-bt-bridge/meters.py | The eleven meters, recording and playback, pitch detection |
fm1-bt-bridge/midiui.py | The MIDI matrix screens |
fm1-bt-bridge/sampleui.py | The sample editor's screen on the Pocket |
fm1-bt-bridge/lcd.py | The Pocket's 1.44" LCD HAT (ST7735S) |
fm1-bt-bridge/pocketui.py | The Pocket's screens on the LCD, in colour, and Settings › Theme |
fm1-bt-bridge/pocketmeters.py | The eleven meters on the LCD |
fm1-bt-bridge/dx7.py | DX7 banks and voices for firmwares that take them: read, named, sent |
fm1-bt-bridge/netaudio.py | The Pocket's Studio link: its sound to the Studio over the network (PipeWire RTP) |
fm1-bt-bridge/update.py | The web app's one-click update |
fm1-bt-bridge/config/fm1-update | Installs the newest release for the update (root helper, run through sudo) |
fm1-bt-bridge/config/50-fm1-ethernet-link.conf | An Ethernet cable straight to a Studio gets an address with no router |
fm1-bt-bridge/battery.py | The PiSugar battery's charge, read over I2C |
fm1-bt-bridge/device.py | Which build a box is and what its hardware can do |
fm1-bt-bridge/deskui.py | The Studio's touch screens and tabs; starting SLOOP or X0X on the Studio and their margins |
fm1-bt-bridge/decks.py | The DJ decks: two decks, the Hercules DJControl Inpulse 200 MK2, their sound, in a program of their own |
GPL-3.0, like SLOOP. See LICENSE.
The Studio's palettes and track colours are SLOOP's (isod89/sloop-fm1, GPL-3.0), and its font is Terminus by Dimitar Toshkov Zhekov (SIL Open Font License 1.1), as SLOOP ships it.
Copied into this repository (each with its licence beside it):
| What | From | Licence |
|---|---|---|
fm1-bt-bridge/vendor/sloop/ (fm1_install.py, sampleio.py) | SLOOP, unchanged (VENDORED.md) | GPL-3.0-only |
fm1-bt-bridge/vendor/fonts/ (Terminus) | Dimitar Toshkov Zhekov, as SLOOP ships it (VENDORED.md) | SIL Open Font License 1.1 |
fm1-bt-bridge/kits/808/ (the 808 KIT's sixteen sounds) | Michael Fischer's recordings of a Roland TR-808 (1994), from tidalcycles/sounds-tr808-fischer (CREDITS.md) | CC0 1.0 |
Built on Raspberry Pi OS and its packages (PipeWire, BlueZ, Python, Pillow, NumPy, mido and others), each under its own licence: the full list.
.syx banks, sent whole or a voice at a time
(not tried on such a firmware yet).library.pyproject.bin) taken over by the new SLOOP with the same screen,
then loaded from the flash file alone..x0b (X0X's own tools/x0x_backup.py info reads it), restored
into a copy, which X0X opened with the same screen, pixel for pixel..mid beside the WAV, one track (FM-1), every note let go. How the notes lined up with the
sound, measured from the takes (each note against where its sound starts): first 64-82 ms early (SLOOP's kick,
median 74 ms over 22; chords 65-76 ms); after the 72 ms shift, the clean single hits of the next take +6 to
+18 ms and one -15 ms (median +13 ms over 19, notes played close together or over another sound reading wider).fm1-bt-bridge/deskdecks.py |
| The Studio's DECKS screen |
fm1-bt-bridge/djlib.py | The Studio DJ Music folder's scan: tags (Serato's too), BPM, key and beat found from the sound |
fm1-bt-bridge/x0x.py | X0X on the Studio: its project to and from X0X's own backups (.x0b) |
fm1-bt-bridge/deskpads.py | The Studio's SAMPLER: pads, kits, SEQ, FX, the sample editor's files |
fm1-bt-bridge/pads.py | The sampler's engine and SLOOP's sequencer, in a process of its own (numpy); its 808 KIT |
fm1-bt-bridge/kits/ | The 808 KIT's sounds, and make_kits.py, which picked them from Fischer's set |
fm1-bt-bridge/padfx.py | Sixteen of SLOOP's punch-in FX (its original set), for the sampler |
fm1-bt-bridge/deskboot.py | The Studio's boot screen |
fm1-bt-bridge/deskmeters.py | The meters drawn for the Studio (it shows ten: no tuner) |
fm1-bt-bridge/deskpages.py | The Studio's pages: settings, lists, confirmations, jobs, a route's details |
fm1-bt-bridge/desk.py | The Studio's touchscreen and touch input |
fm1-bt-bridge/netmidi.py | Network MIDI (RTP-MIDI) and the Mackie Control surface (the Studio) |
fm1-bt-bridge/sloopstyle.py | SLOOP's palettes, track colours, font and themes (the Studio) |
fm1-bt-bridge/sampler.py | The sample editor's sums, shared by the box and the web page |
fm1-bt-bridge/metronome.py | The metronome's click stream |
fm1-bt-bridge/library.py | The library's jobs (backup, restore, projects, samples, firmware); also a command-line tool |
fm1-bt-bridge/sloop.py | SLOOP's editor protocol over USB MIDI; which FM-1 is A and which is B |
fm1-bt-bridge/samplefast.py | SLOOP's sample converter made faster, byte for byte the same |
fm1-bt-bridge/web.py | The web app at http://fm1bridge.local |
fm1-bt-bridge/weblink.py | How the box and the web app talk |
fm1-bt-bridge/vendor/ | SLOOP's firmware installer and sample converter (GPL-3.0) and the Terminus font (SIL OFL), unchanged and credited in VENDORED.md |
fm1-bt-bridge/install.sh | Installs packages, configuration and the boot services |
fm1-bt-bridge/config/ | PipeWire, WirePlumber, polkit, systemd, swap, Wi-Fi, network MIDI and SD-card configuration |
tests/ | A pretend FM-1 speaking SLOOP's protocol, and tests for everything else (python tests/test_library.py etc.; needs mido, Pillow and numpy) |
tools/render_screens.py | Draws the screens as PNG files for this README, without a Pi |
tools/midi_timing.py | Analyses the Bluetooth MIDI timing log |
docs/ | The images and videos on this page |