diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-01-19 21:13:45 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-01-19 21:13:45 +0000 |
commit | 89d564186d0b41469cf56ca3f400f98d3ddcfce8 (patch) | |
tree | 3824c6fb6d96a26a00346d848309ff982e852297 /gtk2_ardour/editor_ops.cc | |
parent | 95a24f9707c342ea1764eb8d1de0a9c73eda84df (diff) |
fixes and bindings for region gain control; set-tempo-from-region implementation : please test and look for tempo/meter related bugs
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2950 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_ops.cc')
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 51a6d294cd..11917851f7 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4119,7 +4119,7 @@ Editor::adjust_region_scale_amplitude (bool up) return; } - ExclusiveRegionSelection (*this, entered_regionview); + ExclusiveRegionSelection esr (*this, entered_regionview); if (selection->regions.empty()) { return; @@ -4135,10 +4135,6 @@ Editor::adjust_region_scale_amplitude (bool up) double fraction = gain_to_slider_position (arv->audio_region()->scale_amplitude ()); - cerr << "slider pos for " << arv->audio_region()->scale_amplitude () - << " = " << fraction - << endl; - if (up) { fraction += 0.05; fraction = min (fraction, 1.0); @@ -4151,16 +4147,14 @@ Editor::adjust_region_scale_amplitude (bool up) continue; } - if (up && fraction >= 1.0) { - continue; - } - fraction = slider_position_to_gain (fraction); fraction = coefficient_to_dB (fraction); fraction = dB_to_coefficient (fraction); - - cerr << "set scale amp for " << arv->audio_region()->name() << " to " << fraction << endl; + if (up && fraction >= 2.0) { + continue; + } + arv->audio_region()->set_scale_amplitude (fraction); session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state())); } @@ -4953,3 +4947,52 @@ Editor::pitch_shift_regions () pitch_shift (selection->regions, 1.2); } +void +Editor::use_region_as_bar () +{ + if (!session) { + return; + } + + ExclusiveRegionSelection esr (*this, entered_regionview); + + if (selection->regions.empty()) { + return; + } + + RegionView* rv = selection->regions.front(); + + const Meter& m (session->tempo_map().meter_at (rv->region()->position())); + + /* region length = 1 bar */ + + /* 1 bar = how many beats per bar */ + + double beats_per_bar = m.beats_per_bar(); + + /* now we want frames per beat. + we have frames per bar, and beats per bar, so ... + */ + + double frames_per_beat = rv->region()->length() / beats_per_bar; + + /* beats per minute = */ + + double beats_per_minute = (session->frame_rate() * 60.0) / frames_per_beat; + + const TempoSection& t (session->tempo_map().tempo_section_at (rv->region()->position())); + + begin_reversible_command (_("set tempo from region")); + XMLNode& before (session->tempo_map().get_state()); + + if (t.frame() == rv->region()->position()) { + session->tempo_map().change_existing_tempo_at (rv->region()->position(), beats_per_minute, t.note_type()); + } else { + session->tempo_map().add_tempo (Tempo (beats_per_minute, t.note_type()), rv->region()->position()); + } + + XMLNode& after (session->tempo_map().get_state()); + + session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), &before, &after)); + commit_reversible_command (); +} |