summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-01-17 13:13:58 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-01-17 13:13:58 +0000
commit76c25a4a4459b8e550c3c687458d04db0beaee77 (patch)
tree5a3da92468a71945b5acd373dae08e216a8e2828
parent9fc6895565fc81ec6061088fe7f4fc4e8318c800 (diff)
add sampo's synthesize_sources perl script to tools; add scroll-playhead-{forward,backward} with ctrl-<arrow> default bindings (for mr beasley)
git-svn-id: svn://localhost/ardour2/trunk@1336 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/ardour.bindings2
-rw-r--r--gtk2_ardour/ardour.menus3
-rw-r--r--gtk2_ardour/editor.h1
-rw-r--r--gtk2_ardour/editor_actions.cc6
-rw-r--r--gtk2_ardour/editor_ops.cc33
-rw-r--r--tools/ARDOUR/SourceInfoLoader.pm75
-rwxr-xr-xtools/synthesize_sources.pl75
7 files changed, 193 insertions, 2 deletions
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 "<Actions>/Editor/toggle-xfades-visible" "")
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
(gtk_accel_path "<Actions>/Editor/scroll-backward" "leftarrow")
+(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<Control>leftarrow")
+(gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<Control>rightarrow")
(gtk_accel_path "<Actions>/Editor/start-range" "<Control>KP_Down")
; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
; (gtk_accel_path "<Actions>/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 @@
<menuitem action='scroll-forward'/>
<menuitem action='scroll-backward'/>
<separator/>
+ <menuitem action='scroll-playhead-forward'/>
+ <menuitem action='scroll-playhead-backward'/>
+ <separator/>
<menuitem action='ToggleWaveformVisibility'/>
<menuitem action='ToggleWaveformsWhileRecording'/>
<menuitem action='ToggleMeasureVisibility'/>
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
@@ -757,6 +757,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 ()
{
nframes_t pos;
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
+ );
+
+
+}
+
+
+