MIDI Program Changes (changing patch via MIDI)

Started by Piombo, February 08, 2016, 04:41:32 PM

Previous topic - Next topic

Piombo

Hi, i'm setting up my ATM trying the best of it in term of manageability with my ableton live set. Going throu the MIDI implementation chart in the manual of the ATM i can see that the voice "program changes" is crossed off, in fact changing bank sub-bank, program or any combination of them makes no changes at all. Is there a way to control the patches changes via midi from a whatsoever sequencer? (ableton in this case) or is possible to control the librarian from/into a DAW anyhow?

paulsoulsby

At the moment, the answer is no.  But it is something that could be added.
Reason for not adding it was purely personal.  I've had too many amazing sounds lost forever when the DAWs prog change was accidentally on and I press play!!

The software is continually being developed, so I could add a setting in the settings file to allow program change to be enabled.  Will do this in the next version.

steholmes

Just bought my Atmegatron at SynthfestUK and was wondering if this was ever implemented? If so where is the settings file and how do i turn it on?

Thanks

rio

#3
Hi steholmes,

I can post the source modification for both devices here, but I am a bit busy at time and I need a bit time to look... I have implemented it myself sometimes ago for my own requirements.

Greetings rio

rio

#4
ok here are the changes for both devices:


1. libraries/Midi/Midibase.h
add method declaration after midiControlChangeReceived

virtual void midiProgramChangeReceived(unsigned char pc) = 0;


2. libraries/Midi/Midi.cpp
change following lines in Midi::read

void Midi::read(unsigned char in_byte)
{
..

else if (status_buffer!=0)
{
if (first_byte == true)
{
//note_byte = in_byte; //
//first_byte = false; // replace this both lines with:

if (status_buffer == (PROGRAM_CHANGE | channel_))
{
if (in_byte < 16) base_->midiProgramChangeReceived(in_byte);
} else {

note_byte = in_byte;
first_byte = false;
}
}
else
{

..
}



for Atmegatron:

3a. libraries/AtmEngine/AtmEngine.h
add method declaration after midiControlChangeReceived


void midiProgramChangeReceived(unsigned char pc);



4a. libraries/AtmEngine/AtmEngine.cpp
add method

void AtmEngine::midiProgramChangeReceived(unsigned char pc)
{
getPatchPtr()->readPatch(pc);
}



for Odytron:

3b. libraries/OdyEngine/OdyEngine.h
add method declaration after midiControlChangeReceived


void midiProgramChangeReceived(unsigned char pc);



4b. libraries/OdyEngine/OdyEngine.cpp
add method

void OdyEngine::midiProgramChangeReceived(unsigned char pc)
{
getPatchPtr()->readPatch(pc);
}



5. recompile both projects and upload the binaries to your devices.


I had compiled atmegatron with libraries 2.1 and odytron with libraries 2.3 in the past, but this should work with last libraries sources too. Maybe Paul will add this to last source/build.

Greetings.

paulsoulsby

Thanks very much for doing this!  I'll add this as a setting for the next software update.