The Half-Physler as presented in NIME 2019
This repository contains material to build a virtual single-reed instrument called the Half-Physler. In this design the excitation mechanism of the instrument is based on actual instrument parts (mouthpiece, clarinet reed, ligature) but the tube is simulated on the Bela board.
In this repository you find the C++ code to compile the tube model as an opcode for Csound. The opcode is implemented following the guidelines of the Csound Plugin Opcode Framework by Lazzarini (2017).
This is a Plug-In for Csound. So make sure you have the latest Csound (Version 6.10 and higher) installed.
The best way to install Csound is to follow the instructions on the Csound Website.
Install the Halfphysler (general info)
git clone https://github.com/ketchupok/half-physler.git cd half-physler make
It can be a bit difficult to access the Internet on the Bela Mini, as it has neither Wifi nor Ethernet on bord. On the Mac, you can share Internet with the Bela Mini plugged to your Mac via the USB port.
In short: In Mac setting allow under 'Sharing' that internet is shared with Bela and Beaglbone. (then the Bela IDE in the browser freezes)
In your terminal log into Bela:
myMac$> ssh email@example.com bela$> dhclient usb1 bela$> git clone https://github.com/ketchupok/half-physler.git bela$> cd half-physler bela$> make
Using the Half-physler Opcode
First run a simple demo.
Linux / Ubuntu
This example needs an external signal! So connect a sound source to the audioIn0 of your Bela board. And a speaker to your right output, to hear some sound.
make installBela belacsound --csd=/Bela/projects/Bela_HalfPhysler_DemoProject/_main.csd --period=32
In some cases we observed that building on Bela fails with error "plugin.h" not found. If you observe this, please report us.
- currently not supported
Resonator with radiation losses, driven by an initial air velocity.
aFeedb, aSound halfphysler aVelocity, kLength, kRad, kSlope, kEndReflection, kDensity, kPos
- aVelocity = input signal to drive the tube model
- kLength = length of resonator in meters
- kRad = radius of beginning section in meters
- kEndReflection = multiplier for end reflection coefficient
- kDensity = multiplier for air density
- k_Pos = pickup position along the tube (0-1) relative to length (this only affects the aSound output, not the aFeedb!)
The halfphysler_bela version uses a fixed number of grid points for the model (M=32). This ensures that the no memory will be allocated in the real-time thread, and a number of gridpoints is used that does not cause dropouts on Bela Mini. Furthermore, the feedback output is set to compensate for the latency of the Bela Mini Board (--period=32).
Further Information / References:
S. Schmutzhard, V. Chatziioannou, and A. Hofmann. Parameter optimisation of a viscothermal time-domain model for wind instruments. In Proceedings of the 2017 International Symposium on Musical Acoustics, pages 27–30, Montreal, CA, 2017.
V. Lazzarini. The csound plugin opcode framework. In Proceedings of the 14th Sound and Music Computing Conference, pages 267–274, 2017.