traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src/core AudioClip.cpp


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/core AudioClip.cpp
Date: Sat, 24 Nov 2007 10:56:47 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/11/24 10:56:47

Modified files:
        src/core       : AudioClip.cpp 

Log message:
        * Mix mono-clips to both channels of a Track

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/AudioClip.cpp?cvsroot=traverso&r1=1.152&r2=1.153

Patches:
Index: AudioClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/AudioClip.cpp,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -b -r1.152 -r1.153
--- AudioClip.cpp       22 Nov 2007 18:27:05 -0000      1.152
+++ AudioClip.cpp       24 Nov 2007 10:56:47 -0000      1.153
@@ -418,7 +418,8 @@
        AudioBus* sendbus = m_song->get_render_bus();
        
        TimeRef mix_pos;
-       audio_sample_t* mixdown[get_channels()];
+       int channelcount = get_channels();
+       audio_sample_t* mixdown[channelcount];
 
 
        TimeRef transportLocation = m_song->get_transport_location();
@@ -455,8 +456,10 @@
                read_frames = m_readSource->rb_read(mixdown, mix_pos, nframes);
        } else {
                read_frames = 
m_readSource->file_read(m_song->renderDecodeBuffer, mix_pos, nframes);
-               for (int chan=0; chan<bus->get_channel_count(); ++chan) {
-                       memcpy(mixdown[chan], 
m_song->renderDecodeBuffer->destination[chan], nframes * 
sizeof(audio_sample_t));
+               if (read_frames > 0) {
+                       for (int chan=0; chan<channelcount; ++chan) {
+                               memcpy(mixdown[chan], 
m_song->renderDecodeBuffer->destination[chan], read_frames * 
sizeof(audio_sample_t));
+                       }
                }
        }
        
@@ -466,14 +469,18 @@
        
 
        apill_foreach(FadeCurve* fade, FadeCurve, m_fades) {
-               fade->process(mixdown, read_frames, bus->get_channel_count());
+               fade->process(mixdown, read_frames, channelcount);
        }
        
        TimeRef endlocation = mix_pos + TimeRef(read_frames, get_rate());
-       m_fader->process_gain(mixdown, mix_pos, endlocation, read_frames, 
bus->get_channel_count());
+       m_fader->process_gain(mixdown, mix_pos, endlocation, read_frames, 
channelcount);
        
-       for (int i=0; i<bus->get_channel_count(); ++i) {
-               Mixer::mix_buffers_no_gain(sendbus->get_buffer(i, nframes), 
bus->get_buffer(i, nframes), nframes);
+       if (channelcount == 1) {
+               Mixer::mix_buffers_no_gain(sendbus->get_buffer(0, read_frames), 
bus->get_buffer(0, read_frames), read_frames);
+               Mixer::mix_buffers_no_gain(sendbus->get_buffer(1, read_frames), 
bus->get_buffer(0, read_frames), read_frames);
+       } else if (channelcount == 2) {
+               Mixer::mix_buffers_no_gain(sendbus->get_buffer(0, read_frames), 
bus->get_buffer(0, read_frames), read_frames);
+               Mixer::mix_buffers_no_gain(sendbus->get_buffer(1, read_frames), 
bus->get_buffer(1, read_frames), read_frames);
        }
        
        return 1;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]