Subversion Repositories svn.mios32

Compare Revisions

Ignore whitespace Rev 2658 → Rev 2659

/trunk/apps/sequencers/midibox_seq_v4/CHANGELOG.txt
49,7 → 49,11
 
o New option 14/33 allows to change the steps of the current selected view only
 
o the MIDI mixer can now send CC values to a bus.
This especially allows to record CC changes (configure MENU->MIDI->Port accordingly
so that it listens to the bus in Jam mode)
 
 
MIDIboxSEQ V4.095
~~~~~~~~~~~~~~~~~
 
/trunk/apps/sequencers/midibox_seq_v4/core/seq_mixer.c
20,6 → 20,8
 
#include "seq_ui.h"
#include "seq_mixer.h"
#include "seq_midi_in.h"
#include "seq_midi_router.h"
#include "seq_file.h"
#include "seq_file_m.h"
 
124,6 → 126,57
 
 
/////////////////////////////////////////////////////////////////////////////
// Sends a CC value, considers Bus target
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_MIXER_SendProgramChange(mios32_midi_port_t midi_port, mios32_midi_chn_t midi_chn, u8 pc)
{
mios32_midi_package_t midi_package;
 
midi_package.type = 0xc;
midi_package.evnt0 = 0xc0 | midi_chn;
midi_package.evnt1 = pc;
midi_package.evnt2 = 0x00;
 
if( (midi_port & 0xf0) == 0xf0 ) { // send to bus?
// forward to router
SEQ_MIDI_ROUTER_Receive(midi_port, midi_package);
 
// forward to transposer/arpeggiator/CC parser/etc...
SEQ_MIDI_IN_Receive(midi_port, midi_package);
 
return 0; // no error
}
 
return MIOS32_MIDI_SendPackage(midi_port, midi_package);
}
 
 
/////////////////////////////////////////////////////////////////////////////
// Sends a CC value, considers Bus target
/////////////////////////////////////////////////////////////////////////////
static s32 SEQ_MIXER_SendCC(mios32_midi_port_t midi_port, mios32_midi_chn_t midi_chn, u8 cc, u8 value)
{
mios32_midi_package_t midi_package;
 
midi_package.type = 0xb;
midi_package.evnt0 = 0xb0 | midi_chn;
midi_package.evnt1 = cc;
midi_package.evnt2 = value;
 
if( (midi_port & 0xf0) == 0xf0 ) { // send to bus?
// forward to router
SEQ_MIDI_ROUTER_Receive(midi_port, midi_package);
 
// forward to transposer/arpeggiator/CC parser/etc...
SEQ_MIDI_IN_Receive(midi_port, midi_package);
 
return 0; // no error
}
 
return MIOS32_MIDI_SendPackage(midi_port, midi_package);
}
 
/////////////////////////////////////////////////////////////////////////////
// Sends a single mixer value
/////////////////////////////////////////////////////////////////////////////
s32 SEQ_MIXER_Send(u8 chn, seq_mixer_par_t par)
137,26 → 190,26
 
switch( par ) {
case SEQ_MIXER_PAR_PRG:
return value == 0 ? 0 : MIOS32_MIDI_SendProgramChange(midi_port, midi_chn, value-1);
return value == 0 ? 0 : SEQ_MIXER_SendProgramChange(midi_port, midi_chn, value-1);
case SEQ_MIXER_PAR_VOLUME:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 7, value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 7, value-1);
case SEQ_MIXER_PAR_PANORAMA:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 10, value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 10, value-1);
case SEQ_MIXER_PAR_REVERB:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 91, value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 91, value-1);
case SEQ_MIXER_PAR_CHORUS:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 93, value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 93, value-1);
case SEQ_MIXER_PAR_MODWHEEL:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 1, value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 1, value-1);
 
case SEQ_MIXER_PAR_CC1:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC1_NUM), value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC1_NUM), value-1);
case SEQ_MIXER_PAR_CC2:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC2_NUM), value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC2_NUM), value-1);
case SEQ_MIXER_PAR_CC3:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC3_NUM), value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC3_NUM), value-1);
case SEQ_MIXER_PAR_CC4:
return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC4_NUM), value-1);
return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC4_NUM), value-1);
}
 
// not supported
/trunk/apps/sequencers/midibox_seq_v4/core/seq_ui_midi.c
398,7 → 398,7
 
case ITEM_IN_PORT: {
u8 port_ix = SEQ_MIDI_PORT_InIxGet(seq_midi_in_port[selected_bus]);
if( SEQ_UI_Var8_Inc(&port_ix, 0, SEQ_MIDI_PORT_InNumGet()-1-4, incrementer) >= 0 ) { // don't allow selection of Bus1..Bus4
if( SEQ_UI_Var8_Inc(&port_ix, 0, SEQ_MIDI_PORT_InNumGet()-1, incrementer) >= 0 ) {
seq_midi_in_port[selected_bus] = SEQ_MIDI_PORT_InPortGet(port_ix);
ui_store_file_required = 1;
return 1; // value changed
/trunk/apps/sequencers/midibox_seq_v4/mios32/mios32_config.h
52,12 → 52,14
// use ./../../bin/avstack.pl | less
// to doublecheck memory consumption
 
#define MIOS32_TASK_HOOKS_STACK_SIZE 1000
#define UIP_TASK_STACK_SIZE 1000
#ifdef MBSEQV4P
# define MIOS32_TASK_MIDI_HOOKS_STACK_SIZE 1900
# define MIDI_TASK_STACK_SIZE 1900
# define MIOS32_TASK_HOOKS_STACK_SIZE 2048
# define UIP_TASK_STACK_SIZE 2048
# define MIOS32_TASK_MIDI_HOOKS_STACK_SIZE 2048
# define MIDI_TASK_STACK_SIZE 2048
#else
# define MIOS32_TASK_HOOKS_STACK_SIZE 1000
# define UIP_TASK_STACK_SIZE 1000
# define MIOS32_TASK_MIDI_HOOKS_STACK_SIZE 1400
# define MIDI_TASK_STACK_SIZE 1400
#endif
73,7 → 75,7
 
// reserved memory for FreeRTOS pvPortMalloc function
#ifdef MBSEQV4P
# define MIOS32_HEAP_SIZE 15*1024
# define MIOS32_HEAP_SIZE 17*1024
#else
# define MIOS32_HEAP_SIZE 13*1024
#endif