From 76c25a4a4459b8e550c3c687458d04db0beaee77 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 17 Jan 2007 13:13:58 +0000 Subject: add sampo's synthesize_sources perl script to tools; add scroll-playhead-{forward,backward} with ctrl- default bindings (for mr beasley) git-svn-id: svn://localhost/ardour2/trunk@1336 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/ardour.bindings | 2 ++ gtk2_ardour/ardour.menus | 3 ++ gtk2_ardour/editor.h | 1 + gtk2_ardour/editor_actions.cc | 6 ++-- gtk2_ardour/editor_ops.cc | 33 ++++++++++++++++++ tools/ARDOUR/SourceInfoLoader.pm | 75 ++++++++++++++++++++++++++++++++++++++++ tools/synthesize_sources.pl | 75 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 tools/ARDOUR/SourceInfoLoader.pm create mode 100755 tools/synthesize_sources.pl diff --git a/gtk2_ardour/ardour.bindings b/gtk2_ardour/ardour.bindings index 8d280b536d..edac5ec4d0 100644 --- a/gtk2_ardour/ardour.bindings +++ b/gtk2_ardour/ardour.bindings @@ -110,6 +110,8 @@ ; (gtk_accel_path "/Editor/toggle-xfades-visible" "") (gtk_accel_path "/Editor/extend-range-to-end-of-region" "rightanglebracket") (gtk_accel_path "/Editor/scroll-backward" "leftarrow") +(gtk_accel_path "/Editor/scroll-playhead-backward" "leftarrow") +(gtk_accel_path "/Editor/scroll-playhead-forward" "rightarrow") (gtk_accel_path "/Editor/start-range" "KP_Down") ; (gtk_accel_path "/ShuttleActions/SetShuttleUnitsSemitones" "") ; (gtk_accel_path "/JACK/JACKLatency128" "") diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus index 7726add6ea..075a526693 100644 --- a/gtk2_ardour/ardour.menus +++ b/gtk2_ardour/ardour.menus @@ -203,6 +203,9 @@ + + + diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index b09f76c9d9..eba23b9074 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -994,6 +994,7 @@ class Editor : public PublicEditor void edit_cursor_forward (); void playhead_backward (); void playhead_forward (); + void scroll_playhead (bool forward); void scroll_backward (float pages=0.8f); void scroll_forward (float pages=0.8f); void scroll_tracks_down (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index f99a828203..065c82c141 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -164,10 +164,12 @@ Editor::register_actions () ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "center-edit-cursor", _("Center Edit Cursor"), mem_fun(*this, &Editor::center_edit_cursor)); ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (editor_actions, "playhead-forward", _("Playhead Forward"), mem_fun(*this, &Editor::playhead_forward)); + + act = ActionManager::register_action (editor_actions, "scroll-playhead-forward", _("Playhead forward"), bind (mem_fun(*this, &Editor::scroll_playhead), true));; ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (editor_actions, "playhead-backward", _("Playhead Backward"), mem_fun(*this, &Editor::playhead_backward)); + act = ActionManager::register_action (editor_actions, "scroll-playhead-backward", _("Playhead Backward"), bind (mem_fun(*this, &Editor::scroll_playhead), false)); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (editor_actions, "playhead-to-edit", _("Playhead to Edit"), bind (mem_fun(*this, &Editor::cursor_align), true)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "edit-to-playhead", _("Edit to Playhead"), bind (mem_fun(*this, &Editor::cursor_align), false)); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 5ab343392a..a4269a9bb6 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -756,6 +756,39 @@ Editor::cursor_to_selection_end (Cursor *cursor) } } +void +Editor::scroll_playhead (bool forward) +{ + nframes_t pos = playhead_cursor->current_frame; + nframes_t delta = (nframes_t) floor (current_page_frames() / 0.8); + + if (forward) { + if (pos == max_frames) { + return; + } + + if (pos < max_frames - delta) { + pos += delta ; + } else { + pos = max_frames; + } + + } else { + + if (pos == 0) { + return; + } + + if (pos > delta) { + pos -= delta; + } else { + pos = 0; + } + } + + session->request_locate (pos); +} + void Editor::playhead_backward () { diff --git a/tools/ARDOUR/SourceInfoLoader.pm b/tools/ARDOUR/SourceInfoLoader.pm new file mode 100644 index 0000000000..ec327d91f6 --- /dev/null +++ b/tools/ARDOUR/SourceInfoLoader.pm @@ -0,0 +1,75 @@ +package ARDOUR::SourceInfoLoader; + + +use XML::Handler::Subs; + +@ISA = qw( XML::Handler::Subs ); + +$VERSION = 1.0; + + +sub new { + my ($type, $sessionName) = @_; + + my $self = $type->SUPER::new(); + + $self->{SessionName} = $sessionName; + $self->{InRegions} = 0; + %self->{Sources} = {}; + + + return $self; +} + +sub start_element { + my $self = shift; + my $element = shift; + + my $atts = $element->{Attributes}; + + if ( $element->{Name} eq "Source") { + if ( ! -f "interchange/".$sessionName."/audiofiles/".$atts->{name}) { + $atts->{calculated_length} = 1; + $self->{Sources}->{$atts->{id}} = $atts; + } + } + + + if ( $self->{InRegions} eq 1 && $element->{Name} eq "Region") { + #print "Looking at region ".$atts->{id}."\n"; + my $num = 0; + + my $region_length = $atts->{length}; + while ( $atts->{"source-".$num} ne "" ) { + + if ($region_length > $self->{Sources}->{$atts->{"source-".$num}}->{calculated_length} ) { + $self->{Sources}->{$atts->{"source-".$num}}->{calculated_length} = $region_length; + } + + $num++; + } + } + + if ( $element->{Name} eq "Regions") { + $self->{InRegions} = 1; + #print "In regions\n"; + } + + +} + +sub end_element { + my $self = shift; + my $element = shift; + + if ( $element->{Name} eq "Regions") { + $self->{InRegions} = 0; + #print "Out of regions\n"; + } + +} + +1; + + + diff --git a/tools/synthesize_sources.pl b/tools/synthesize_sources.pl new file mode 100755 index 0000000000..ebb903cf37 --- /dev/null +++ b/tools/synthesize_sources.pl @@ -0,0 +1,75 @@ +#!/usr/bin/env perl +# Ardour session synthesizer +# (c)Sampo Savolainen 2007 +# +# GPL +# This reads an Ardour session file and creates zero-signal source files +# for each missing source file. The length of each file is determined +# by how far regions using that source file go into the sample data. + +use XML::Parser::PerlSAX; +use XML::Handler::XMLWriter; +use IO::Handle; + +use ARDOUR::SourceInfoLoader; + + +my ($samplerate, $sessionName) = @ARGV; + +if ( ! -d $sessionName || ! -f $sessionName."/".$sessionName.".ardour" ) { + print "usage: synthesize_sources.pl samplerate [session name, the name must match the directory and the .ardour file in it]\n"; + exit; +} + +my $sessionFile = $sessionName."/".$sessionName.".ardour"; + + +my $handler = new ARDOUR::SourceInfoLoader($sessionName); + +my $parser = XML::Parser::PerlSAX->new( Handler => $handler ); + +$parser->parse(Source => { SystemId => $sessionFile }); + +if ( ! -d $sessionName."/interchange" ) { + mkdir $sessionName."/interchange/" || die "couldn't create ".$sessionName."/interchange"; +} + +if ( ! -d $sessionName."/interchange/".$sessionName ) { + mkdir $sessionName."/interchange/".$sessionName || die "couldn't create ".$sessionName."/interchange/".$sessionName; +} + +if ( ! -d $sessionName."/interchange/".$sessionName."/audiofiles" ) { + mkdir $sessionName."/interchange/".$sessionName."/audiofiles" || die "couldn't create ".$sessionName."/interchange/".$sessionName."/audiofiles"; +} + +if ( ! -d $sessionName."/peaks") { + mkdir $sessionName."/peaks/" || die "couldn't create ".$sessionName."/peaks"; +} + +my $audioFileDirectory = $sessionName."/interchange/".$sessionName."/audiofiles"; + +my %sources = %{$handler->{Sources}}; + +foreach my $tmp (keys %sources) { + + print "Generating ".$audioFileDirectory."/".$sources{$tmp}->{name}.".wav\n"; + + system("sox", + "-t", "raw", # /dev/zero is raw :) + "-r", $samplerate, # set sample rate + "-c", "1", # 1 channel + "-b", # input in bytes + "-s", # signed + "/dev/zero", # input signal + + "-w", # output 16 bit + "-t", "wav", # format wav + $audioFileDirectory."/".$sources{$tmp}->{name}, # filename + "trim", "0", $sources{$tmp}->{calculated_length}."s" # trim silence to wanted sample amount + ); + + +} + + + -- cgit v1.2.3