merge -r 13398:13409 svn+ssh://ardoursvn@subversion.ardour.org/ardour2/branches/3.0

git-svn-id: svn://localhost/ardour2/branches/3.0-SG@13410 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-11-09 13:34:58 +00:00
parent 8bb2a5b241
commit 98a70a905b
11 changed files with 854 additions and 82 deletions

View file

@ -10,9 +10,9 @@
<Option name="mute-affects-main-outs" value="1"/> <Option name="mute-affects-main-outs" value="1"/>
<Option name="monitoring-model" value="ExternalMonitoring"/> <Option name="monitoring-model" value="ExternalMonitoring"/>
<Option name="solo-latch" value="1"/> <Option name="solo-latch" value="1"/>
<Option name="mtc-port" value="@MIDITAG@"/> <Option name="mtc-port" value="mtc"/>
<Option name="mmc-port" value="@MIDITAG@"/> <Option name="mmc-port" value="mmc"/>
<Option name="midi-port" value="@MIDITAG@"/> <Option name="midi-port" value="control"/>
<Option name="jack-time-master" value="1"/> <Option name="jack-time-master" value="1"/>
<Option name="trace-midi-input" value="0"/> <Option name="trace-midi-input" value="0"/>
<Option name="trace-midi-output" value="0"/> <Option name="trace-midi-output" value="0"/>
@ -27,8 +27,8 @@
<Option name="xfade-model" value="FullCrossfade"/> <Option name="xfade-model" value="FullCrossfade"/>
<Option name="no-new-session-dialog" value="1"/> <Option name="no-new-session-dialog" value="1"/>
<Option name="timecode-source-is-synced" value="1"/> <Option name="timecode-source-is-synced" value="1"/>
<Option name="auditioner-left-out" value="@JACK_INPUT@1"/> <Option name="auditioner-left-out" value="default"/>
<Option name="auditioner-right-out" value="@JACK_INPUT@2"/> <Option name="auditioner-right-out" value="default"/>
<Option name="quieten-at-speed" value="1.000000"/> <Option name="quieten-at-speed" value="1.000000"/>
<Option name="use-vst" value="1"/> <Option name="use-vst" value="1"/>
<Option name="use-tranzport" value="1"/> <Option name="use-tranzport" value="1"/>

View file

@ -1070,7 +1070,7 @@ RCOptionEditor::RCOptionEditor ()
"<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n" "<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n"
"<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source." "<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source."
"Instead the frame rate indication in the main clock will flash red and Ardour will convert between the external " "Instead the frame rate indication in the main clock will flash red and Ardour will convert between the external "
"timecode standard and the session standard")); "timecode standard and the session standard."));
add_option (_("Transport"), _sync_framerate); add_option (_("Transport"), _sync_framerate);
@ -1082,7 +1082,7 @@ RCOptionEditor::RCOptionEditor ()
); );
Gtkmm2ext::UI::instance()->set_tip Gtkmm2ext::UI::instance()->set_tip
(_sync_genlock->tip_widget(), (_sync_genlock->tip_widget(),
_("<b>When enabled</b> indicates that the selected external timecode source shares sync (Black &amp; Burst, Wordclock, etc) with the audio interface")); _("<b>When enabled</b> indicates that the selected external timecode source shares sync (Black &amp; Burst, Wordclock, etc) with the audio interface."));
add_option (_("Transport"), _sync_genlock); add_option (_("Transport"), _sync_genlock);
@ -1094,8 +1094,14 @@ RCOptionEditor::RCOptionEditor ()
sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997) sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997)
); );
Gtkmm2ext::UI::instance()->set_tip Gtkmm2ext::UI::instance()->set_tip
(_sync_genlock->tip_widget(), (_sync_source_2997->tip_widget(),
_("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001")); _("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
"SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
"drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n"
"Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
"That is not the actual rate, however some vendor use that rate - despite it being against the specs - "
"because the variant of using exactly 29.97 fps has zero timecode drift.\n"
));
add_option (_("Transport"), _sync_source_2997); add_option (_("Transport"), _sync_source_2997);

View file

@ -1201,6 +1201,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
framepos_t ltc_enc_pos; framepos_t ltc_enc_pos;
double ltc_enc_cnt; double ltc_enc_cnt;
framepos_t ltc_enc_off; framepos_t ltc_enc_off;
bool restarting;
jack_latency_range_t ltc_out_latency; jack_latency_range_t ltc_out_latency;

View file

@ -53,8 +53,8 @@ LTC_Slave::LTC_Slave (Session& s)
monotonic_cnt = 0; monotonic_cnt = 0;
fps_detected=false; fps_detected=false;
ltc_timecode = timecode_60; // track changes of LTC fps ltc_timecode = session.config.get_timecode_format();
a3e_timecode = timecode_60; // track changes of Ardour's fps a3e_timecode = session.config.get_timecode_format();
printed_timecode_warning = false; printed_timecode_warning = false;
ltc_detect_fps_cnt = ltc_detect_fps_max = 0; ltc_detect_fps_cnt = ltc_detect_fps_max = 0;
memset(&prev_frame, 0, sizeof(LTCFrameExt)); memset(&prev_frame, 0, sizeof(LTCFrameExt));
@ -198,22 +198,23 @@ LTC_Slave::detect_ltc_fps(int frameno, bool df)
} }
ltc_detect_fps_cnt++; ltc_detect_fps_cnt++;
if (ltc_detect_fps_cnt > 40) if (ltc_detect_fps_cnt > 40) {
{ if (ltc_detect_fps_cnt > ltc_detect_fps_max) {
if (ltc_detect_fps_cnt > ltc_detect_fps_max
&& ( ceil(timecode.rate) != (ltc_detect_fps_max + 1)
|| timecode.drop != df
)
)
{
DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC detected FPS %1%2",
ltc_detect_fps_max + 1, timecode.drop ? "df" : ""));
detected_fps = ltc_detect_fps_max + 1; detected_fps = ltc_detect_fps_max + 1;
if (df) { if (df) {
/* LTC df -> indicates fractional framerate */ /* LTC df -> indicates fractional framerate */
detected_fps = detected_fps * 1000.0 / 1001.0; if (Config->get_timecode_source_2997()) {
detected_fps = detected_fps * 999.0 / 1000.0;
} else {
detected_fps = detected_fps * 1000.0 / 1001.0;
}
}
if (timecode.rate != detected_fps || timecode.drop != df) {
DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC detected FPS: %1%2\n", detected_fps, df?"df":"ndf"));
} else {
detected_fps = 0; /* no cange */
} }
DEBUG_TRACE (DEBUG::LTC, string_compose ("LTC detected FPS: %1%2\n", detected_fps, df?"df":"ndf"));
} }
ltc_detect_fps_cnt = ltc_detect_fps_max = 0; ltc_detect_fps_cnt = ltc_detect_fps_max = 0;
} }
@ -232,14 +233,6 @@ LTC_Slave::detect_ltc_fps(int frameno, bool df)
TimecodeFormat tc_format = apparent_timecode_format(); TimecodeFormat tc_format = apparent_timecode_format();
TimecodeFormat cur_timecode = session.config.get_timecode_format(); TimecodeFormat cur_timecode = session.config.get_timecode_format();
if (Config->get_timecode_source_2997() && tc_format == Timecode::timecode_2997drop) {
tc_format = Timecode::timecode_2997000drop;
}
else
if (Config->get_timecode_source_2997() && tc_format == Timecode::timecode_2997) {
tc_format = Timecode::timecode_2997000;
}
if (Config->get_timecode_sync_frame_rate()) { if (Config->get_timecode_sync_frame_rate()) {
/* enforce time-code */ /* enforce time-code */
if (!did_reset_tc_format) { if (!did_reset_tc_format) {
@ -519,9 +512,9 @@ LTC_Slave::apparent_timecode_format () const
else if (timecode.rate == 25 && !timecode.drop) else if (timecode.rate == 25 && !timecode.drop)
return timecode_25; return timecode_25;
else if (rint(timecode.rate * 100) == 2997 && !timecode.drop) else if (rint(timecode.rate * 100) == 2997 && !timecode.drop)
return timecode_2997; return (Config->get_timecode_source_2997() ? timecode_2997000 : timecode_2997);
else if (rint(timecode.rate * 100) == 2997 && timecode.drop) else if (rint(timecode.rate * 100) == 2997 && timecode.drop)
return timecode_2997drop; return (Config->get_timecode_source_2997() ? timecode_2997000drop : timecode_2997drop);
else if (timecode.rate == 30 && timecode.drop) else if (timecode.rate == 30 && timecode.drop)
return timecode_2997drop; // timecode_30drop; // LTC counting to 30 frames w/DF *means* 29.97 df return timecode_2997drop; // timecode_30drop; // LTC counting to 30 frames w/DF *means* 29.97 df
else if (timecode.rate == 30 && !timecode.drop) else if (timecode.rate == 30 && !timecode.drop)

View file

@ -313,9 +313,14 @@ MTC_Slave::update_mtc_time (const byte *msg, bool was_full, framepos_t now)
can_notify_on_unknown_rate = true; can_notify_on_unknown_rate = true;
break; break;
case MTC_30_FPS_DROP: case MTC_30_FPS_DROP:
timecode.rate = (30000.0/1001.0); if (Config->get_timecode_source_2997()) {
tc_format = Timecode::timecode_2997000drop;
timecode.rate = (29970.0/1000.0);
} else {
tc_format = timecode_2997drop;
timecode.rate = (30000.0/1001.0);
}
timecode.drop = true; timecode.drop = true;
tc_format = timecode_2997drop;
can_notify_on_unknown_rate = true; can_notify_on_unknown_rate = true;
break; break;
case MTC_30_FPS: case MTC_30_FPS:

View file

@ -66,7 +66,7 @@ Session::ltc_tx_initialize()
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX init sr: %1 fps: %2\n", nominal_frame_rate(), timecode_to_frames_per_second(ltc_enc_tcformat))); DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX init sr: %1 fps: %2\n", nominal_frame_rate(), timecode_to_frames_per_second(ltc_enc_tcformat)));
ltc_encoder = ltc_encoder_create(nominal_frame_rate(), ltc_encoder = ltc_encoder_create(nominal_frame_rate(),
timecode_to_frames_per_second(ltc_enc_tcformat), timecode_to_frames_per_second(ltc_enc_tcformat),
0); -2);
ltc_encoder_set_bufsize(ltc_encoder, nominal_frame_rate(), 23.0); ltc_encoder_set_bufsize(ltc_encoder, nominal_frame_rate(), 23.0);
ltc_encoder_set_filter(ltc_encoder, LTC_RISE_TIME(1.0)); ltc_encoder_set_filter(ltc_encoder, LTC_RISE_TIME(1.0));
@ -81,6 +81,7 @@ Session::ltc_tx_initialize()
ltc_tx_resync_latency(); ltc_tx_resync_latency();
Xrun.connect_same_thread (*this, boost::bind (&Session::ltc_tx_reset, this)); Xrun.connect_same_thread (*this, boost::bind (&Session::ltc_tx_reset, this));
engine().GraphReordered.connect_same_thread (*this, boost::bind (&Session::ltc_tx_resync_latency, this)); engine().GraphReordered.connect_same_thread (*this, boost::bind (&Session::ltc_tx_resync_latency, this));
restarting = false;
} }
void void
@ -113,6 +114,8 @@ Session::ltc_tx_reset()
ltc_buf_off = 0; ltc_buf_off = 0;
ltc_enc_byte = 0; ltc_enc_byte = 0;
ltc_enc_cnt = 0; ltc_enc_cnt = 0;
ltc_encoder_reset(ltc_encoder);
} }
void void
@ -134,6 +137,7 @@ Session::ltc_tx_recalculate_position()
config.get_subframes_per_frame(), config.get_subframes_per_frame(),
config.get_timecode_offset_negative(), config.get_timecode_offset() config.get_timecode_offset_negative(), config.get_timecode_offset()
); );
restarting = false;
} }
void void
@ -193,7 +197,7 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
TimecodeFormat cur_timecode = config.get_timecode_format(); TimecodeFormat cur_timecode = config.get_timecode_format();
if (cur_timecode != ltc_enc_tcformat) { if (cur_timecode != ltc_enc_tcformat) {
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX1: TC format mismatch - reinit sr: %1 fps: %2\n", nominal_frame_rate(), timecode_to_frames_per_second(cur_timecode))); DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX1: TC format mismatch - reinit sr: %1 fps: %2\n", nominal_frame_rate(), timecode_to_frames_per_second(cur_timecode)));
if (ltc_encoder_reinit(ltc_encoder, nominal_frame_rate(), timecode_to_frames_per_second(cur_timecode), 0)) { if (ltc_encoder_reinit(ltc_encoder, nominal_frame_rate(), timecode_to_frames_per_second(cur_timecode), -2)) {
PBD::error << _("LTC encoder: invalid framerate - LTC encoding is disabled for the remainder of this session.") << endmsg; PBD::error << _("LTC encoder: invalid framerate - LTC encoding is disabled for the remainder of this session.") << endmsg;
ltc_tx_cleanup(); ltc_tx_cleanup();
return; return;
@ -396,6 +400,12 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
maxdiff = slave()->resolution(); maxdiff = slave()->resolution();
} else { } else {
maxdiff = ceil(fabs(ltc_speed))*2.0; maxdiff = ceil(fabs(ltc_speed))*2.0;
if (nominal_frame_rate() != frame_rate()) {
maxdiff *= 3.0;
}
if (ltc_enc_tcformat == Timecode::timecode_23976 || ltc_enc_tcformat == Timecode::timecode_24976) {
maxdiff *= 15.0;
}
} }
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX4: enc: %1 + %2 - %3 || buf-bytes: %4 enc-byte: %5\n", DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX4: enc: %1 + %2 - %3 || buf-bytes: %4 enc-byte: %5\n",
@ -464,6 +474,10 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX5 restart encoder: soff %1 byte %2 cycoff %3\n", DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX5 restart encoder: soff %1 byte %2 cycoff %3\n",
soff, ltc_enc_byte, cyc_off)); soff, ltc_enc_byte, cyc_off));
if ( (ltc_speed < 0 && ltc_enc_byte !=9 ) || (ltc_speed >= 0 && ltc_enc_byte !=0 ) ) {
restarting = true;
}
if (cyc_off > 0 && cyc_off <= nframes) { if (cyc_off > 0 && cyc_off <= nframes) {
/* offset in this cycle */ /* offset in this cycle */
txf= rint(cyc_off / fabs(ltc_speed)); txf= rint(cyc_off / fabs(ltc_speed));
@ -483,11 +497,11 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
/* reduce (low freq) jitter. /* reduce (low freq) jitter.
* The granularity of the LTC encoder speed is 1 byte = * The granularity of the LTC encoder speed is 1 byte =
* (frames-per-timecode-frame / 10) audio-samples. * (frames-per-timecode-frame / 10) audio-samples.
* Thus, tiny speed changes [as produced by the slave] * Thus, tiny speed changes [as produced by some slaves]
* may not have any effect in the cycle when they occur, * may not have any effect in the cycle when they occur,
* but they will add up over time. * but they will add up over time.
* *
* This is a linear approx to compensate for this drift * This is a linear approx to compensate for this jitter
* and prempt re-sync when the drift builds up. * and prempt re-sync when the drift builds up.
* *
* However, for very fast speeds - when 1 LTC bit is * However, for very fast speeds - when 1 LTC bit is
@ -536,13 +550,24 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
} }
} }
if (ltc_encoder_encode_byte(ltc_encoder, ltc_enc_byte, (ltc_speed==0)?1.0:(1.0/ltc_speed))) { int enc_frames;
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX6.3 encoder error byte %1\n", ltc_enc_byte));
ltc_encoder_buffer_flush(ltc_encoder); if (restarting) {
ltc_tx_reset(); /* write zero bytes -- don't touch encoder until we're at a frame-boundary
return; * otherwise the biphase polarity may be inverted.
*/
enc_frames = fptcf / 10.0;
memset(&ltc_enc_buf[ltc_buf_len], 127, enc_frames * sizeof(ltcsnd_sample_t));
} else {
if (ltc_encoder_encode_byte(ltc_encoder, ltc_enc_byte, (ltc_speed==0)?1.0:(1.0/ltc_speed))) {
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX6.3 encoder error byte %1\n", ltc_enc_byte));
ltc_encoder_buffer_flush(ltc_encoder);
ltc_tx_reset();
return;
}
enc_frames = ltc_encoder_get_buffer(ltc_encoder, &(ltc_enc_buf[ltc_buf_len]));
} }
int enc_frames = ltc_encoder_get_buffer(ltc_encoder, &(ltc_enc_buf[ltc_buf_len]));
#ifdef LTC_GEN_FRAMEDBUG #ifdef LTC_GEN_FRAMEDBUG
DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX6.3 encoded %1 bytes for LTC-byte %2 at spd %3\n", enc_frames, ltc_enc_byte, ltc_speed)); DEBUG_TRACE (DEBUG::LTC, string_compose("LTC TX6.3 encoded %1 bytes for LTC-byte %2 at spd %3\n", enc_frames, ltc_enc_byte, ltc_speed));
#endif #endif
@ -573,6 +598,7 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
ltc_enc_cnt = 0; ltc_enc_cnt = 0;
} else if (ltc_enc_byte == 0) { } else if (ltc_enc_byte == 0) {
ltc_enc_cnt = 0; ltc_enc_cnt = 0;
restarting=false;
} }
} }
#ifdef LTC_GEN_FRAMEDBUG #ifdef LTC_GEN_FRAMEDBUG

View file

@ -285,7 +285,7 @@ def configure(conf):
autowaf.check_pkg(conf, 'libcurl', uselib_store='CURL', autowaf.check_pkg(conf, 'libcurl', uselib_store='CURL',
atleast_version='7.0.0') atleast_version='7.0.0')
autowaf.check_pkg(conf, 'ltc', uselib_store='LTC', autowaf.check_pkg(conf, 'ltc', uselib_store='LTC',
atleast_version='0.7.0', mandatory=False) atleast_version='1.0.3', mandatory=False)
# we don't try to detect this, since its part of our source tree # we don't try to detect this, since its part of our source tree

View file

@ -26,7 +26,7 @@
namespace Timecode { namespace Timecode {
float Time::default_rate = 30.0; double Time::default_rate = 30.0;
/** Increment @a timecode by exactly one frame (keep subframes value). /** Increment @a timecode by exactly one frame (keep subframes value).
@ -424,7 +424,7 @@ hours_floor(Time& timecode)
} }
} }
float double
timecode_to_frames_per_second(TimecodeFormat t) timecode_to_frames_per_second(TimecodeFormat t)
{ {
switch (t) { switch (t) {

View file

@ -48,17 +48,17 @@ enum TimecodeFormat {
}; };
struct Time { struct Time {
bool negative; bool negative;
uint32_t hours; uint32_t hours;
uint32_t minutes; uint32_t minutes;
uint32_t seconds; uint32_t seconds;
uint32_t frames; ///< Timecode frames (not audio samples) uint32_t frames; ///< Timecode frames (not audio samples)
uint32_t subframes; ///< Typically unused uint32_t subframes; ///< Typically unused
float rate; ///< Frame rate of this Time double rate; ///< Frame rate of this Time
static float default_rate; ///< Rate to use for default constructor static double default_rate; ///< Rate to use for default constructor
bool drop; ///< Whether this Time uses dropframe Timecode bool drop; ///< Whether this Time uses dropframe Timecode
Time (float a_rate = default_rate) { Time (double a_rate = default_rate) {
negative = false; negative = false;
hours = 0; hours = 0;
minutes = 0; minutes = 0;
@ -99,7 +99,7 @@ void seconds_floor (Time& timecode);
void minutes_floor (Time& timecode); void minutes_floor (Time& timecode);
void hours_floor (Time& timecode); void hours_floor (Time& timecode);
float timecode_to_frames_per_second(TimecodeFormat const t); double timecode_to_frames_per_second(TimecodeFormat const t);
bool timecode_has_drop_frames(TimecodeFormat const t); bool timecode_has_drop_frames(TimecodeFormat const t);
std::string timecode_format_name (TimecodeFormat const t); std::string timecode_format_name (TimecodeFormat const t);

View file

@ -2952,6 +2952,768 @@
</Patch> </Patch>
</PatchNameList> </PatchNameList>
</PatchBank> </PatchBank>
<PatchBank Name="Sweet!">
<PatchNameList>
<Patch Number="1" Name="Violin (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="40"/>
</PatchMIDICommands>
</Patch>
<Patch Number="2" Name="Mandolin (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="25"/>
</PatchMIDICommands>
</Patch>
<Patch Number="3" Name="JazzTenor (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="125"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="4" Name="BalladTenor (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="126"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="5" Name="PopTenor (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="127"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="6" Name="SopranoSax (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
<Patch Number="7" Name="AltoSax (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="65"/>
</PatchMIDICommands>
</Patch>
<Patch Number="8" Name="TenorSax (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="9" Name="GrowlSax (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="111"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="10" Name="Flute (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="73"/>
</PatchMIDICommands>
</Patch>
<Patch Number="11" Name="Clarinet (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="71"/>
</PatchMIDICommands>
</Patch>
<Patch Number="12" Name="Oboe (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="68"/>
</PatchMIDICommands>
</Patch>
<Patch Number="13" Name="PanFlute (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="75"/>
</PatchMIDICommands>
</Patch>
<Patch Number="14" Name="ClassicalFlute (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="115"/>
<ProgramChange Number="73"/>
</PatchMIDICommands>
</Patch>
<Patch Number="15" Name="FlugelHorn (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="118"/>
<ProgramChange Number="56"/>
</PatchMIDICommands>
</Patch>
<Patch Number="16" Name="MutedTrumpet (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="59"/>
</PatchMIDICommands>
</Patch>
<Patch Number="17" Name="Trumpet (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="115"/>
<ProgramChange Number="56"/>
</PatchMIDICommands>
</Patch>
<Patch Number="18" Name="Trombone (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="57"/>
</PatchMIDICommands>
</Patch>
<Patch Number="19" Name="JazzTrumpet (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="120"/>
<ProgramChange Number="56"/>
</PatchMIDICommands>
</Patch>
<Patch Number="20" Name="SilverTrumpet (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="121"/>
<ProgramChange Number="56"/>
</PatchMIDICommands>
</Patch>
<Patch Number="21" Name="GoldenTrumpet (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="122"/>
<ProgramChange Number="56"/>
</PatchMIDICommands>
</Patch>
<Patch Number="22" Name="Harmonica (Sweet!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="112"/>
<ProgramChange Number="22"/>
</PatchMIDICommands>
</Patch>
</PatchNameList>
</PatchBank>
<PatchBank Name="Cool!">
<PatchNameList>
<Patch Number="1" Name="SparkleStack (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="121"/>
<ProgramChange Number="5"/>
</PatchMIDICommands>
</Patch>
<Patch Number="2" Name="GalaxyEP (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="4"/>
</PatchMIDICommands>
</Patch>
<Patch Number="3" Name="SuitcaseEP (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="118"/>
<ProgramChange Number="4"/>
</PatchMIDICommands>
</Patch>
<Patch Number="4" Name="ElectricPiano (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="119"/>
<ProgramChange Number="4"/>
</PatchMIDICommands>
</Patch>
<Patch Number="5" Name="JazzGuitar (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="115"/>
<ProgramChange Number="26"/>
</PatchMIDICommands>
</Patch>
<Patch Number="6" Name="VintageLead (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="125"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="7" Name="BluesGuitar (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="29"/>
</PatchMIDICommands>
</Patch>
<Patch Number="8" Name="MutedGuitar (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="119"/>
<ProgramChange Number="28"/>
</PatchMIDICommands>
</Patch>
<Patch Number="9" Name="SlideSolid (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="110"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="10" Name="SlideClean (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="28"/>
</PatchMIDICommands>
</Patch>
<Patch Number="11" Name="DynamicMute (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="118"/>
<ProgramChange Number="28"/>
</PatchMIDICommands>
</Patch>
<Patch Number="12" Name="ElectricGtr (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="28"/>
</PatchMIDICommands>
</Patch>
<Patch Number="13" Name="TremoloSolid (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="111"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="14" Name="ChorusSolid (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="107"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="15" Name="BalladSolid (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="109"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="16" Name="PowerLead (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="115"/>
<ProgramChange Number="30"/>
</PatchMIDICommands>
</Patch>
<Patch Number="17" Name="CleanGuitar (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="112"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="18" Name="SlapSolid (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="108"/>
<ProgramChange Number="27"/>
</PatchMIDICommands>
</Patch>
<Patch Number="19" Name="FunkGuitar (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="116"/>
<ProgramChange Number="28"/>
</PatchMIDICommands>
</Patch>
<Patch Number="20" Name="ElectricBass (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="33"/>
</PatchMIDICommands>
</Patch>
<Patch Number="21" Name="DynoPickBass (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="34"/>
</PatchMIDICommands>
</Patch>
<Patch Number="22" Name="FretlessBass (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="112"/>
<ProgramChange Number="35"/>
</PatchMIDICommands>
</Patch>
<Patch Number="23" Name="Organ (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="118"/>
<ProgramChange Number="18"/>
</PatchMIDICommands>
</Patch>
<Patch Number="24" Name="JazzOrgan (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="16"/>
</PatchMIDICommands>
</Patch>
<Patch Number="25" Name="RotorOrgan (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="18"/>
</PatchMIDICommands>
</Patch>
<Patch Number="26" Name="FullRocker (Cool!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="115"/>
<ProgramChange Number="18"/>
</PatchMIDICommands>
</Patch>
</PatchNameList>
</PatchBank>
<PatchBank Name="Live!">
<PatchNameList>
<Patch Number="1" Name="GrandPiano (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="0"/>
</PatchMIDICommands>
</Patch>
<Patch Number="2" Name="BrightPiano (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="112"/>
<ProgramChange Number="1"/>
</PatchMIDICommands>
</Patch>
<Patch Number="3" Name="WarmGrand (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="114"/>
<ProgramChange Number="0"/>
</PatchMIDICommands>
</Patch>
<Patch Number="4" Name="Strings (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="49"/>
</PatchMIDICommands>
</Patch>
<Patch Number="5" Name="Allegro (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="122"/>
<ProgramChange Number="49"/>
</PatchMIDICommands>
</Patch>
<Patch Number="6" Name="Orchestra (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="116"/>
<ProgramChange Number="49"/>
</PatchMIDICommands>
</Patch>
<Patch Number="7" Name="12StringGtr (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="113"/>
<ProgramChange Number="25"/>
</PatchMIDICommands>
</Patch>
<Patch Number="8" Name="SlideSteel (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="118"/>
<ProgramChange Number="25"/>
</PatchMIDICommands>
</Patch>
<Patch Number="9" Name="DynamicSteel (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="116"/>
<ProgramChange Number="25"/>
</PatchMIDICommands>
</Patch>
<Patch Number="10" Name="SteelGuitar (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="25"/>
</PatchMIDICommands>
</Patch>
<Patch Number="11" Name="SteelMute (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="120"/>
<ProgramChange Number="25"/>
</PatchMIDICommands>
</Patch>
<Patch Number="12" Name="SaxSection (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="116"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="13" Name="SaxSectionSoft (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="121"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="14" Name="SaxSectionHard (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="122"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="15" Name="SaxAppeal (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="123"/>
<ProgramChange Number="66"/>
</PatchMIDICommands>
</Patch>
<Patch Number="16" Name="HyperBrass (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="118"/>
<ProgramChange Number="62"/>
</PatchMIDICommands>
</Patch>
<Patch Number="17" Name="PopBrass (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="117"/>
<ProgramChange Number="62"/>
</PatchMIDICommands>
</Patch>
<Patch Number="18" Name="OctaveBrass (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="116"/>
<ProgramChange Number="62"/>
</PatchMIDICommands>
</Patch>
<Patch Number="19" Name="FrenchHorns (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="112"/>
<ProgramChange Number="60"/>
</PatchMIDICommands>
</Patch>
<Patch Number="20" Name="GospelVoices (Live!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="0"/>
<ControlChange Control="32" Value="116"/>
<ProgramChange Number="52"/>
</PatchMIDICommands>
</Patch>
</PatchNameList>
</PatchBank>
<PatchBank Name="S.Articulation!">
<PatchNameList>
<Patch Number="1" Name="ConcertGuitar (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="32"/>
<ProgramChange Number="0"/>
</PatchMIDICommands>
</Patch>
<Patch Number="2" Name="SteelGuitar (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="32"/>
<ProgramChange Number="1"/>
</PatchMIDICommands>
</Patch>
<Patch Number="3" Name="FlamencoGtr (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="33"/>
<ProgramChange Number="0"/>
</PatchMIDICommands>
</Patch>
<Patch Number="4" Name="PedalSteel (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="36"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="5" Name="WarmSolid (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="33"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="6" Name="CleanSolid (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="34"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="7" Name="GuitarHero (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="32"/>
<ProgramChange Number="5"/>
</PatchMIDICommands>
</Patch>
<Patch Number="8" Name="70sSolidGtr (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="38"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="9" Name="NylonGuitar (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="34"/>
<ProgramChange Number="0"/>
</PatchMIDICommands>
</Patch>
<Patch Number="10" Name="FolkGuitar (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="33"/>
<ProgramChange Number="1"/>
</PatchMIDICommands>
</Patch>
<Patch Number="11" Name="WarmElectric (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="32"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="12" Name="CleanElectric (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="35"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="13" Name="HalfDrive (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="37"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="14" Name="Feedbacker (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="33"/>
<ProgramChange Number="4"/>
</PatchMIDICommands>
</Patch>
<Patch Number="15" Name="Saxophone (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="32"/>
<ProgramChange Number="82"/>
</PatchMIDICommands>
</Patch>
<Patch Number="16" Name="BigBandSax (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="35"/>
<ProgramChange Number="82"/>
</PatchMIDICommands>
</Patch>
<Patch Number="17" Name="RockSax (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="33"/>
<ProgramChange Number="82"/>
</PatchMIDICommands>
</Patch>
<Patch Number="18" Name="Trumpet (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="32"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
<Patch Number="19" Name="SilverTrumpet (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="33"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
<Patch Number="20" Name="GoldenTrumpet (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="34"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
<Patch Number="21" Name="BigBandTrumpet (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="37"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
<Patch Number="22" Name="TrumpetFall (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="38"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
<Patch Number="23" Name="TrumpetShake (S.Articulation!)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="35"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
</PatchNameList>
</PatchBank>
<PatchBank Name="MegaVoice">
<PatchNameList>
<Patch Number="1" Name="NylonGuitar (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="0"/>
</PatchMIDICommands>
</Patch>
<Patch Number="2" Name="SteelGuitar (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="1"/>
</PatchMIDICommands>
</Patch>
<Patch Number="3" Name="12StringGtr (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="1"/>
<ProgramChange Number="2"/>
</PatchMIDICommands>
</Patch>
<Patch Number="4" Name="HiStringGtr (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="2"/>
</PatchMIDICommands>
</Patch>
<Patch Number="5" Name="SolidGuitar1 (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="1"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="6" Name="SolidGuitar2 (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="2"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="7" Name="CleanGuitar (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="3"/>
</PatchMIDICommands>
</Patch>
<Patch Number="8" Name="OverdriveGtr (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="4"/>
</PatchMIDICommands>
</Patch>
<Patch Number="9" Name="DistortionGtr (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="5"/>
</PatchMIDICommands>
</Patch>
<Patch Number="10" Name="AcousticBass (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="16"/>
</PatchMIDICommands>
</Patch>
<Patch Number="11" Name="ElectricBass (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="17"/>
</PatchMIDICommands>
</Patch>
<Patch Number="12" Name="PickBass (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="18"/>
</PatchMIDICommands>
</Patch>
<Patch Number="13" Name="FretlessBass (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="19"/>
</PatchMIDICommands>
</Patch>
<Patch Number="14" Name="TenorSax (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="82"/>
</PatchMIDICommands>
</Patch>
<Patch Number="15" Name="Trumpet (MegaVoice)">
<PatchMIDICommands>
<ControlChange Control="0" Value="8"/>
<ControlChange Control="32" Value="0"/>
<ProgramChange Number="64"/>
</PatchMIDICommands>
</Patch>
</PatchNameList>
</PatchBank>
</ChannelNameSet> </ChannelNameSet>
<ChannelNameSet Name="GM+XG"> <ChannelNameSet Name="GM+XG">
<AvailableForChannels> <AvailableForChannels>
@ -8337,4 +9099,4 @@
</PatchBank> </PatchBank>
</ChannelNameSet> </ChannelNameSet>
</MasterDeviceNames> </MasterDeviceNames>
</MIDINameDocument> </MIDINameDocument>

23
wscript
View file

@ -759,28 +759,7 @@ def build(bld):
for i in children: for i in children:
bld.recurse(i) bld.recurse(i)
# ideally, we'd like to use the OS-provided MIDI API bld.install_files (os.path.join(bld.env['SYSCONFDIR'], 'ardour3', ), 'ardour_system.rc')
# for default ports. that doesn't work on at least
# Fedora (Nov 9th, 2009) so use JACK MIDI on linux.
if sys.platform == 'darwin':
rc_subst_dict = {
'MIDITAG' : 'control',
'MIDITYPE' : 'coremidi',
'JACK_INPUT' : 'auditioner'
}
else:
rc_subst_dict = {
'MIDITAG' : 'control',
'MIDITYPE' : 'jack',
'JACK_INPUT' : 'auditioner'
}
obj = bld(features = 'subst')
obj.source = 'ardour.rc.in'
obj.target = 'ardour_system.rc'
obj.dict = rc_subst_dict
obj.install_path = '${SYSCONFDIR}/ardour3'
def i18n(bld): def i18n(bld):
bld.recurse (i18n_children) bld.recurse (i18n_children)