From 41c892802f75e62e452399f0b1c7319fee61e677 Mon Sep 17 00:00:00 2001 From: Sakari Bergen Date: Sat, 11 Oct 2008 14:07:50 +0000 Subject: * 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 --- libs/ardour/export_channel.cc | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'libs/ardour/export_channel.cc') 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,11 +81,22 @@ 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(); @@ -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: -- cgit v1.2.3