#include "audio-column.hh"
#include "audio-item.hh"
-#include "performance.hh"
Audio_column::Audio_column (Moment when)
{
}
void
-Audio_staff::output (Midi_stream &midi_stream, int track)
+Audio_staff::output (Midi_stream &midi_stream, int track, bool port)
{
- Midi_track midi_track (track);
+ Midi_track midi_track (track, port);
Midi_walker i (this, &midi_track);
for (; i.ok (); i++)
struct Audio_staff : public Audio_element
{
void add_audio_item (Audio_item *ai);
- void output (Midi_stream &midi_stream_r, int track);
+ void output (Midi_stream &midi_stream_r, int track, bool port);
Audio_staff ();
{
public:
int number_;
+ int port_;
DECLARE_CLASSNAME (Midi_track);
vector<Midi_event*> events_;
- Midi_track (int number);
+ Midi_track (int number, bool port);
~Midi_track ();
void add (int, Midi_item *midi);
class Performance : public Music_output
{
public:
- Performance ();
+ Performance (bool ports=false);
~Performance ();
DECLARE_CLASSNAME(Performance);
vector<Audio_staff*> audio_staffs_;
vector<Audio_element*> audio_elements_;
Output_def *midi_;
+ bool ports_;
};
#endif /* PERFORMANCE_HH */
#include "std-string.hh"
#include "string-convert.hh"
-Midi_track::Midi_track (int number)
+Midi_track::Midi_track (int number, bool port)
: number_ (number)
{
// 4D 54 72 6B MTrk
// only for format 0 (currently using format 1)?
data_string += String_convert::hex2bin (data_str0);
- string port = "00" "ff" "21" "01" + String_convert::int2hex (number_, 2, '0');
- data_string += String_convert::hex2bin (port);
+ if (port)
+ {
+ string port = "00" "ff" "21" "01"
+ + String_convert::int2hex (number_, 2, '0');
+ data_string += String_convert::hex2bin (port);
+ }
char const *footer_str0 = "00" "ff2f" "00";
string footer_string = String_convert::hex2bin (footer_str0);
#include "string-convert.hh"
#include "warn.hh"
-Performance::Performance ()
+Performance::Performance (bool ports)
+ : midi_ (0)
+ , ports_ (ports)
{
- midi_ = 0;
}
Performance::~Performance ()
Audio_staff *s = audio_staffs_[i];
if (be_verbose_global)
progress_indication ("[" + to_string (i));
- s->output (midi_stream, i);
+ s->output (midi_stream, i, ports_);
if (be_verbose_global)
progress_indication ("]");
}
void
Score_performer::finish (SCM)
{
+ SCM channel_mapping = context ()->get_property ("midiChannelMapping");
+ bool use_ports = channel_mapping == ly_symbol2scm ("voice");
+ performance_->ports_ = use_ports;
recurse_over_translators (context (),
&Translator::finalize,
&Translator_group::finalize,