See : https://faustdoc.grame.fr/manual/midi/#configuring-midi-in-faust
We already have MIDI channel for individual messages , We could possibly extend the global: declare options "[midi:on] »; with an extended version: declare options "[midi:on CHAN] »; that would specific a given CHAN for all MIDI aware controllers ? Stéphane > Le 9 déc. 2025 à 22:30, Aaron Krister Johnson <[email protected]> a écrit : > > Hi, > > In case anyone else was interested in this issue, I wanted to report my > process to successfully get a Faust executable for e.g. a synth to only > listen to one particular MIDI channel (by default, for ON, OFF, CTRL, BEND > messages will respond to ALL MIDI channels). > > In short, if you look at what the shell scripts that compile a `.dsp` file > do, they first call `faust` to get a `.cpp` file that wraps an architecture > file. If you recreate this process by seeing what the actual command that run > are with bash debugging on: > > bash -x /usr/bin/faust2jackconsole -osc -midi -nvoices 1 your_synth.dsp > > ...you'll see the `faust` command that spits out a `.cpp` file. Run this > separately, then edit lines that look something like: > > if (type == MIDI_NOTE_ON) { > ... > } > > and change them to: > > if (type == MIDI_NOTE_ON & channel == 2) { // if you want to only listen on > channel 3 > ... > } > > Do this for the stanzas for `MIDI_NOTE_OFF`, `MIDI_PITCH_BEND`, etc. and any > message type you want to filter by channel. > > Once you've finished editing the `.cpp` file, continue running the `c++` > command you saw the faust wrapper script (e.g. `faust2jackconsole`) spit out. > > When you test it, you'll see that your instrument will properly only respond > to the midi channel you edited it to respond to. Bear in mind, midi channel 1 > is `0` in code, and 2 is `1`, etc. etc. i.e. for MIDI_NOTE_ON: > > 0x90 // channel 1 > 0x91 // channel 2 > 0x92 // channel 3 > etc. etc. > > Hope this helps someone else wanting to do the same. > > Devs: should be a simple matter to make this dynamic from `faust` itself so > that the front-end can make this easy with an extra optional parameter, like > so....?: > > faust2jackconsole -osc -midi -nvoices -midi_channel 4 -effect auto > my_synth.dsp > > Where `-midi_channel ...` would be the new option that would effectively > alter those intermediate `.cpp` lines I refer to. > > Aaron Krister Johnson > Music, etc.: > https://soundcloud.com/aaron-krister-johnson > https://soundcloud.com/filtercreed > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > https://aaronkristerjohnson.bandcamp.com/ > http://www.untwelve.org > Code: > https://github.com/akjmicro > > > On Mon, Sep 29, 2025 at 9:27 AM Stéphane Letz <[email protected]> wrote: > Not much time to work on that right now yes. > > Stéphane > > > Le 29 sept. 2025 à 18:26, Aaron Krister Johnson <[email protected]> a > > écrit : > > > > Stephane et al, > > > > Gentle nudge here: any more thoughts on this MIDI channel issue, or is the > > best approach for now to work (or hack) around it? > > > > Aaron Krister Johnson > > Music, etc.: > > https://soundcloud.com/aaron-krister-johnson > > https://soundcloud.com/filtercreed > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > https://aaronkristerjohnson.bandcamp.com/ > > http://www.untwelve.org > > Code: > > https://github.com/akjmicro > > > > > > On Sun, Sep 21, 2025 at 9:29 AM Aaron Krister Johnson <[email protected]> > > wrote: > > I guess this is a hack, but for keyOn and keyOff coming from the polyphony > > code (which I traced from looking for `freq` references) I'm thinking > > changing these in `poly-dsp.h` to further filter by channel at compile time > > would be key? > > > > // MIDI API > > MapUI* keyOn(int channel, int pitch, int velocity) > > { > > if (checkPolyphony()) { > > int voice = getFreeVoice(); > > fVoiceTable[voice]->keyOn(pitch, velocity, > > fVoiceTable[voice]->fCurNote == kLegatoVoice); > > return fVoiceTable[voice]; > > } else { > > return 0; > > } > > } > > > > void keyOff(int channel, int pitch, int velocity = 127) > > { > > if (checkPolyphony()) { > > int voice = getPlayingVoice(pitch); > > if (voice != kNoVoice) { > > fVoiceTable[voice]->keyOff(); > > } else { > > fprintf(stderr, "Playing pitch = %d not found\n", > > pitch); > > } > > } > > } > > > > Change to: > > > > // MIDI API > > MapUI* keyOn(int channel, int pitch, int velocity) > > { > > if (checkPolyphony() & (channel == 1)) { // to respond only to > > MIDI channel 2, actual number is MIDI channel - 1 > > int voice = getFreeVoice(); > > fVoiceTable[voice]->keyOn(pitch, velocity, > > fVoiceTable[voice]->fCurNote == kLegatoVoice); > > return fVoiceTable[voice]; > > } else { > > return 0; > > } > > } > > > > void keyOff(int channel, int pitch, int velocity = 127) > > { > > if (checkPolyphony() & (channel == 1)) { // to respond only to > > MIDI channel 2, actual number is MIDI channel - 1 > > int voice = getPlayingVoice(pitch); > > if (voice != kNoVoice) { > > fVoiceTable[voice]->keyOff(); > > } else { > > fprintf(stderr, "Playing pitch = %d not found\n", > > pitch); > > } > > } > > } > > > > But yes, would be better to allow the polyphony/voice-table architecture to > > be more standards compliant about channels, I'm thinking. I'll test this, > > for now it will do if it works. > > > > Aaron Krister Johnson > > Music, etc.: > > https://soundcloud.com/aaron-krister-johnson > > https://soundcloud.com/filtercreed > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > https://aaronkristerjohnson.bandcamp.com/ > > http://www.untwelve.org > > Code: > > https://github.com/akjmicro > > > > > > On Sun, Sep 21, 2025 at 8:26 AM Aaron Krister Johnson <[email protected]> > > wrote: > > Is this MIDI channel filtering option being considered? If not, would the > > dev team welcome a patch if I tried my hand at it? > > > > ~AKJ > > > > Aaron Krister Johnson > > Music, etc.: > > https://soundcloud.com/aaron-krister-johnson > > https://soundcloud.com/filtercreed > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > https://aaronkristerjohnson.bandcamp.com/ > > http://www.untwelve.org > > Code: > > https://github.com/akjmicro > > > > On Fri, Sep 12, 2025, 13:31 Aaron Krister Johnson <[email protected]> > > wrote: > > Ah, so it seems others have bumped into this limitation. > > > > Please, Faust devs, implement this! :D > > > > Aaron Krister Johnson > > Music, etc.: > > https://soundcloud.com/aaron-krister-johnson > > https://soundcloud.com/filtercreed > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > https://aaronkristerjohnson.bandcamp.com/ > > http://www.untwelve.org > > Code: > > https://github.com/akjmicro > > > > > > On Thu, Sep 11, 2025 at 2:17 AM <[email protected]> wrote: > > Additional reading here: https://github.com/grame-cncm/faust/discussions/696 > > > > All of this must be carefully considered... > > > > Stéphane > > > > > Le 10 sept. 2025 à 19:26, Aaron Krister Johnson <[email protected]> a > > > écrit : > > > > > > P.S. -- and if this is implemented, covering key/vel/velocity, too :D > > > > > > Aaron Krister Johnson > > > Music, etc.: > > > https://soundcloud.com/aaron-krister-johnson > > > https://soundcloud.com/filtercreed > > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > > https://aaronkristerjohnson.bandcamp.com/ > > > http://www.untwelve.org > > > Code: > > > https://github.com/akjmicro > > > > > > > > > On Wed, Sep 10, 2025 at 10:23 AM Aaron Krister Johnson > > > <[email protected]> wrote: > > > Thanks, Stephane, yes, it would be most useful to have a Faust synth only > > > respond on a declared channel, and `0` (or no specification) being > > > "listen on all channels". > > > > > > Would this be in the "options" header, then? > > > > > > Aaron Krister Johnson > > > Music, etc.: > > > https://soundcloud.com/aaron-krister-johnson > > > https://soundcloud.com/filtercreed > > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > > https://aaronkristerjohnson.bandcamp.com/ > > > http://www.untwelve.org > > > Code: > > > https://github.com/akjmicro > > > > > > > > > On Wed, Sep 10, 2025 at 9:00 AM Stéphane Letz <[email protected]> wrote: > > > Hi Aaron, > > > > > > MIDI metadata for standard MIDI control can use MIDI channel: > > > https://faustdoc.grame.fr/manual/midi/#configuring-midi-in-faust > > > > > > But it is currently not possible to set a given channel for polyphony, > > > you can see that the channel info is not used in the polyphonic code for > > > now: > > > > > > https://github.com/grame-cncm/faust/blob/f5c23da4fe6e09fa55667ae588f4b6ef9c226cae/architecture/faust/dsp/poly-dsp.h#L900 > > > > > > Should we extend/revisit the syntax of freq/gate/gain convention for > > > something like [freq: chan], [gate: chan], [gain: chan], with the > > > convention chan = 0 would mean « receive on all channels», like for other > > > MIDI messages ? > > > > > > Stéphane > > > > > > > Le 10 sept. 2025 à 17:35, Aaron Krister Johnson <[email protected]> a > > > > écrit : > > > > > > > > I notice in the manual, certain MIDI slider metadata operations can be > > > > filtered by a certain MIDI channel, like `keyon` uses the velocity of a > > > > given key on a given channel. > > > > > > > > But IMO, these kinds of operations seem geared towards a non-standard > > > > way of using a MIDI signal. Most useful mono- or poly- synths would > > > > want to use the general > > > > keywords with special meaning: `freq/key`, `gain/vel`, and `gate` to > > > > drive the usually needed MIDI parameters in, for instance, a > > > > synthesizer signal chain. > > > > > > > > The problem I am having is: I'd like to pair a custom Faust synth with > > > > an outboard analog monosynth. Ideally, I could assign Faust to listen > > > > only on a certain MIDI channel. > > > > As it is, it seems like I have to do the opposite: Faust will respond > > > > to _all_ channels (not ideal) and I make the hardware synth respond to > > > > MIDI channel 2. They are isolated only > > > > by the fact that they are listening on different MIDI ports (otherwise, > > > > the Faust synth would be "hearing" both channels and trying to respond > > > > to both). What I have works for now, > > > > but let's say I want 2 Faust synths -- they'd both be responding to all > > > > channels that particular virtual port is listening on. > > > > > > > > So, in short: is there an easy way to make a running Faust synth > > > > instance listen only to a particular MIDI channel when it's designed to > > > > use the keywords `freq`, `gain`, and `gate`, > > > > per the docs? How easy would it be to hack Faust or add a feature for > > > > users for this if not? > > > > > > > > Aaron Krister Johnson > > > > Music, etc.: > > > > https://soundcloud.com/aaron-krister-johnson > > > > https://soundcloud.com/filtercreed > > > > https://www.youtube.com/channel/UC_utjGYbSizWE0dNyr0Vdmg > > > > https://aaronkristerjohnson.bandcamp.com/ > > > > http://www.untwelve.org > > > > Code: > > > > https://github.com/akjmicro > > > > _______________________________________________ > > > > Faudiostream-users mailing list > > > > [email protected] > > > > https://lists.sourceforge.net/lists/listinfo/faudiostream-users > > > > > > _______________________________________________ Faudiostream-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/faudiostream-users
