projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added dialog to allow adding any Midi CC track.
[ardour.git]
/
gtk2_ardour
/
editor_export_audio.cc
diff --git
a/gtk2_ardour/editor_export_audio.cc
b/gtk2_ardour/editor_export_audio.cc
index 1b0308b080bd768bc998ba450c85efc8c1e17e4a..9b0a7c7cb590f2ff412f49a284fa304189b39b0b 100644
(file)
--- a/
gtk2_ardour/editor_export_audio.cc
+++ b/
gtk2_ardour/editor_export_audio.cc
@@
-15,9
+15,10
@@
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id$
*/
*/
+/* Note: public Editor methods are documented in public_editor.h */
+
#include <unistd.h>
#include <climits>
#include <unistd.h>
#include <climits>
@@
-42,6
+43,7
@@
#include <ardour/audioregion.h>
#include <ardour/audioplaylist.h>
#include <ardour/chan_count.h>
#include <ardour/audioregion.h>
#include <ardour/audioplaylist.h>
#include <ardour/chan_count.h>
+#include <ardour/session_directory.h>
#include <ardour/source_factory.h>
#include <ardour/audiofilesource.h>
#include <ardour/source_factory.h>
#include <ardour/audiofilesource.h>
@@
-56,7
+58,7
@@
void
Editor::export_session()
{
if (session) {
Editor::export_session()
{
if (session) {
- export_range (
0
, session->current_end_frame());
+ export_range (
session->current_start_frame()
, session->current_end_frame());
}
}
}
}
@@
-75,7
+77,7
@@
Editor::export_selection ()
}
void
}
void
-Editor::export_range (
jack_nframes_t start, jack_
nframes_t end)
+Editor::export_range (
nframes_t start,
nframes_t end)
{
if (session) {
if (export_dialog == 0) {
{
if (session) {
if (export_dialog == 0) {
@@
-88,19
+90,20
@@
Editor::export_range (jack_nframes_t start, jack_nframes_t end)
}
}
}
}
+/** Export the first selected region */
void
Editor::export_region ()
{
void
Editor::export_region ()
{
- if (
clicked_regionview == 0
) {
+ if (
selection->regions.empty()
) {
return;
}
return;
}
- ExportDialog* dialog = new ExportRegionDialog (*this, clicked_regionview->region());
+ boost::shared_ptr<Region> r = selection->regions.front()->region();
+
+ ExportDialog* dialog = new ExportRegionDialog (*this, r);
dialog->connect_to_session (session);
dialog->connect_to_session (session);
- dialog->set_range (
- clicked_regionview->region()->first_frame(),
- clicked_regionview->region()->last_frame());
+ dialog->set_range (r->first_frame(), r->last_frame());
dialog->start_export();
}
dialog->start_export();
}
@@
-162,16
+165,18
@@
bool
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
{
boost::shared_ptr<AudioFileSource> fs;
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
{
boost::shared_ptr<AudioFileSource> fs;
- const
jack_
nframes_t chunk_size = 4096;
-
jack_
nframes_t to_read;
+ const nframes_t chunk_size = 4096;
+ nframes_t to_read;
Sample buf[chunk_size];
gain_t gain_buffer[chunk_size];
Sample buf[chunk_size];
gain_t gain_buffer[chunk_size];
-
jack_
nframes_t pos;
+ nframes_t pos;
char s[PATH_MAX+1];
uint32_t cnt;
vector<boost::shared_ptr<AudioFileSource> > sources;
uint32_t nchans;
char s[PATH_MAX+1];
uint32_t cnt;
vector<boost::shared_ptr<AudioFileSource> > sources;
uint32_t nchans;
-
+
+ const string sound_directory = session->session_directory().sound_path().to_string();
+
nchans = region->n_channels();
/* don't do duplicate of the entire source if that's what is going on here */
nchans = region->n_channels();
/* don't do duplicate of the entire source if that's what is going on here */
@@
-187,11
+192,11
@@
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
for (cnt = 0; cnt < 999999; ++cnt) {
if (nchans == 1) {
for (cnt = 0; cnt < 999999; ++cnt) {
if (nchans == 1) {
- snprintf (s, sizeof(s), "%s/%s_%" PRIu32 ".wav", s
ession->sound_dir()
.c_str(),
+ snprintf (s, sizeof(s), "%s/%s_%" PRIu32 ".wav", s
ound_directory
.c_str(),
legalize_for_path(region->name()).c_str(), cnt);
}
else {
legalize_for_path(region->name()).c_str(), cnt);
}
else {
- snprintf (s, sizeof(s), "%s/%s_%" PRIu32 "-%" PRId32 ".wav", s
ession->sound_dir()
.c_str(),
+ snprintf (s, sizeof(s), "%s/%s_%" PRIu32 "-%" PRId32 ".wav", s
ound_directory
.c_str(),
legalize_for_path(region->name()).c_str(), cnt, n);
}
legalize_for_path(region->name()).c_str(), cnt, n);
}
@@
-210,7
+215,7
@@
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
try {
try {
- fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::create
Readable (DataType::AUDIO, *session, path, AudioFileSource::Flag (0
)));
+ fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::create
Writable (DataType::AUDIO, *session, path, false, session->frame_rate(
)));
}
catch (failed_constructor& err) {
}
catch (failed_constructor& err) {
@@
-229,7
+234,7
@@
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
pos = region->position();
while (to_read) {
pos = region->position();
while (to_read) {
-
jack_
nframes_t this_time;
+ nframes_t this_time;
this_time = min (to_read, chunk_size);
this_time = min (to_read, chunk_size);
@@
-258,6
+263,7
@@
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
for (vector<boost::shared_ptr<AudioFileSource> >::iterator src = sources.begin(); src != sources.end(); ++src) {
(*src)->update_header (0, *now, tnow);
for (vector<boost::shared_ptr<AudioFileSource> >::iterator src = sources.begin(); src != sources.end(); ++src) {
(*src)->update_header (0, *now, tnow);
+ (*src)->mark_immutable ();
}
return true;
}
return true;
@@
-290,7
+296,7
@@
Editor::write_audio_selection (TimeSelection& ts)
if (atv->is_audio_track()) {
if (atv->is_audio_track()) {
-
AudioPlaylist* playlist = dynamic_cast<AudioPlaylist*
>(atv->get_diskstream()->playlist());
+
boost::shared_ptr<AudioPlaylist> playlist = boost::dynamic_pointer_cast<AudioPlaylist
>(atv->get_diskstream()->playlist());
if (playlist && write_audio_range (*playlist, atv->get_diskstream()->n_channels(), ts) == 0) {
ret = -1;
if (playlist && write_audio_range (*playlist, atv->get_diskstream()->n_channels(), ts) == 0) {
ret = -1;
@@
-306,27
+312,29
@@
bool
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list<AudioRange>& range)
{
boost::shared_ptr<AudioFileSource> fs;
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list<AudioRange>& range)
{
boost::shared_ptr<AudioFileSource> fs;
- const
jack_
nframes_t chunk_size = 4096;
-
jack_
nframes_t nframes;
+ const nframes_t chunk_size = 4096;
+ nframes_t nframes;
Sample buf[chunk_size];
gain_t gain_buffer[chunk_size];
Sample buf[chunk_size];
gain_t gain_buffer[chunk_size];
-
jack_
nframes_t pos;
+ nframes_t pos;
char s[PATH_MAX+1];
uint32_t cnt;
string path;
vector<boost::shared_ptr<AudioFileSource> > sources;
char s[PATH_MAX+1];
uint32_t cnt;
string path;
vector<boost::shared_ptr<AudioFileSource> > sources;
- uint32_t channels = count.get(DataType::AUDIO);
+ const string sound_directory = session->session_directory().sound_path().to_string();
+
+ uint32_t channels = count.n_audio();
for (uint32_t n=0; n < channels; ++n) {
for (cnt = 0; cnt < 999999; ++cnt) {
if (channels == 1) {
for (uint32_t n=0; n < channels; ++n) {
for (cnt = 0; cnt < 999999; ++cnt) {
if (channels == 1) {
- snprintf (s, sizeof(s), "%s/%s_%" PRIu32 ".wav", s
ession->sound_dir()
.c_str(),
+ snprintf (s, sizeof(s), "%s/%s_%" PRIu32 ".wav", s
ound_directory
.c_str(),
legalize_for_path(playlist.name()).c_str(), cnt);
}
else {
legalize_for_path(playlist.name()).c_str(), cnt);
}
else {
- snprintf (s, sizeof(s), "%s/%s_%" PRIu32 "-%" PRId32 ".wav", s
ession->sound_dir()
.c_str(),
+ snprintf (s, sizeof(s), "%s/%s_%" PRIu32 "-%" PRId32 ".wav", s
ound_directory
.c_str(),
legalize_for_path(playlist.name()).c_str(), cnt, n);
}
legalize_for_path(playlist.name()).c_str(), cnt, n);
}
@@
-343,7
+351,7
@@
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
path = s;
try {
path = s;
try {
- fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::create
Readable (DataType::AUDIO, *session, path, AudioFileSource::Flag (0
)));
+ fs = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::create
Writable (DataType::AUDIO, *session, path, false, session->frame_rate(
)));
}
catch (failed_constructor& err) {
}
catch (failed_constructor& err) {
@@
-361,7
+369,7
@@
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
pos = (*i).start;
while (nframes) {
pos = (*i).start;
while (nframes) {
-
jack_
nframes_t this_time;
+ nframes_t this_time;
this_time = min (nframes, chunk_size);
this_time = min (nframes, chunk_size);
@@
-393,7
+401,7
@@
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
while (nframes) {
while (nframes) {
-
jack_
nframes_t this_time = min (nframes, chunk_size);
+ nframes_t this_time = min (nframes, chunk_size);
memset (buf, 0, sizeof (Sample) * this_time);
for (uint32_t n=0; n < channels; ++n) {
memset (buf, 0, sizeof (Sample) * this_time);
for (uint32_t n=0; n < channels; ++n) {
@@
-416,8
+424,9
@@
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
time (&tnow);
now = localtime (&tnow);
time (&tnow);
now = localtime (&tnow);
- for (uint32_t n=0; n < channels; ++n) {
- sources[n]->update_header (0, *now, tnow);
+ for (vector<boost::shared_ptr<AudioFileSource> >::iterator s = sources.begin(); s != sources.end(); ++s) {
+ (*s)->update_header (0, *now, tnow);
+ (*s)->mark_immutable ();
// do we need to ref it again?
}
// do we need to ref it again?
}