summaryrefslogtreecommitdiff
path: root/libs/ardour/export_channel.cc
diff options
context:
space:
mode:
authorSakari Bergen <sakari.bergen@beatwaves.net>2008-10-11 14:07:50 +0000
committerSakari Bergen <sakari.bergen@beatwaves.net>2008-10-11 14:07:50 +0000
commit41c892802f75e62e452399f0b1c7319fee61e677 (patch)
tree581915ee0b92e7532238d1b4adc98c44673dfb3a /libs/ardour/export_channel.cc
parent354790d754d8d8072b2c03459ca0077b6fd216cc (diff)
* Some Export GUI tweaks
* Export region with fades * Removed some debug output git-svn-id: svn://localhost/ardour2/branches/3.0@3923 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/export_channel.cc')
-rw-r--r--libs/ardour/export_channel.cc34
1 files changed, 32 insertions, 2 deletions
diff --git a/libs/ardour/export_channel.cc b/libs/ardour/export_channel.cc
index e0242a9f52..094d6f9104 100644
--- a/libs/ardour/export_channel.cc
+++ b/libs/ardour/export_channel.cc
@@ -81,12 +81,23 @@ RegionExportChannelFactory::RegionExportChannelFactory (Session * session, Audio
frames_per_cycle (session->engine().frames_per_cycle ()),
buffers_up_to_date (false),
region_start (region.position()),
- position (region_start)
+ position (region_start),
+
+ mixdown_buffer (0),
+ gain_buffer (0)
{
switch (type) {
case Raw:
n_channels = region.n_channels();
break;
+ case Fades:
+ n_channels = region.n_channels();
+
+ mixdown_buffer = new Sample [frames_per_cycle];
+ gain_buffer = new Sample [frames_per_cycle];
+ memset (gain_buffer, 1.0, sizeof (Sample) * frames_per_cycle);
+
+ break;
case Processed:
n_channels = track.n_outputs().n_audio();
break;
@@ -100,6 +111,17 @@ RegionExportChannelFactory::RegionExportChannelFactory (Session * session, Audio
buffers.ensure_buffers (DataType::AUDIO, n_channels, frames_per_cycle);
}
+RegionExportChannelFactory::~RegionExportChannelFactory ()
+{
+ if (mixdown_buffer) {
+ delete[] mixdown_buffer;
+ }
+
+ if (gain_buffer) {
+ delete[] gain_buffer;
+ }
+}
+
ExportChannelPtr
RegionExportChannelFactory::create (uint32_t channel)
{
@@ -124,14 +146,22 @@ RegionExportChannelFactory::read (uint32_t channel, Sample * data, nframes_t fra
void
RegionExportChannelFactory::update_buffers (nframes_t frames)
{
+ assert (frames <= frames_per_cycle);
+
switch (type) {
case Raw:
for (size_t channel = 0; channel < n_channels; ++channel) {
region.read (buffers.get_audio (channel).data(), position - region_start, frames, channel);
}
break;
+ case Fades:
+ assert (mixdown_buffer && gain_buffer);
+ for (size_t channel = 0; channel < n_channels; ++channel) {
+ memset (mixdown_buffer, 0, sizeof (Sample) * frames);
+ region.read_at (buffers.get_audio (channel).data(), mixdown_buffer, gain_buffer, position, frames, channel);
+ }
+ break;
case Processed:
- std::cout << "exporting " << frames << " frames from position " << position << std::endl;
track.export_stuff (buffers, position, frames);
break;
default: