summaryrefslogtreecommitdiff
path: root/libs/ardour/amp.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-07-23 03:01:31 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-07-23 03:01:31 +0000
commit38510cb19e217c62a8e1e1664bed13f44c42ef08 (patch)
tree6e4b5f25d7b2703d4c762b8f8e8c9f0370ed711a /libs/ardour/amp.cc
parent3804e3bc497f68d4b68f51794815db3ffe5e7a91 (diff)
install ardour.menus and bindings file (elthariel) ; initial, basic MIDI gain (fader) working
git-svn-id: svn://localhost/ardour2/branches/3.0@5416 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/amp.cc')
-rw-r--r--libs/ardour/amp.cc52
1 files changed, 46 insertions, 6 deletions
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc
index 0efaaa3535..b8e0ad700f 100644
--- a/libs/ardour/amp.cc
+++ b/libs/ardour/amp.cc
@@ -154,6 +154,18 @@ Amp::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*end_frame*/, n
/* gain has not changed, but its non-unity
*/
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+
+ MidiBuffer& mb (*i);
+
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ ev.scale_velocity (_current_gain);
+ }
+ }
+ }
+
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
apply_gain_to_buffer (i->data(), nframes, _current_gain);
}
@@ -197,16 +209,19 @@ Amp::apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t targ
/* MIDI Gain */
for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
-#if 0
- MidiBuffer& mb (*i);
+
+ MidiBuffer& mb (*i);
+
for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
- Evoral::MIDIEvent<MidiBuffer::TimeType> ev (*m);
- if (ev.buffer()[0] == MIDI_CMD_NOTE_ON) {
- ev.buffer()[2] = (uint8_t) rint (ev.buffer()[2] * 1.0);
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+
+ if (ev.is_note_on()) {
+ gain_t scale = delta * (ev.time()/nframes);
+ std::cerr << "scale by " << scale << " for " << ev.time() << " of " << nframes << std::endl;
+ ev.scale_velocity (scale);
}
}
-#endif
}
/* Audio Gain */
@@ -238,10 +253,35 @@ void
Amp::apply_simple_gain (BufferSet& bufs, nframes_t nframes, gain_t target)
{
if (target == 0.0) {
+
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+ MidiBuffer& mb (*i);
+
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ ev.set_velocity (0);
+ }
+ }
+ }
+
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
memset (i->data(), 0, sizeof (Sample) * nframes);
}
+
} else if (target != 1.0) {
+
+ for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
+ MidiBuffer& mb (*i);
+
+ for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
+ Evoral::MIDIEvent<MidiBuffer::TimeType> ev = *m;
+ if (ev.is_note_on()) {
+ ev.scale_velocity (target);
+ }
+ }
+ }
+
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
apply_gain_to_buffer (i->data(), nframes, target);
}