summaryrefslogtreecommitdiff
path: root/muse2/muse/wavetrack.cpp
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2013-01-16 04:23:15 +0000
committerTim E. Real <termtech@rogers.com>2013-01-16 04:23:15 +0000
commit78d5201caed32cb1e55de85287bd3b9fab325bd4 (patch)
tree36cf004042091701361f05c6732f609a99366f48 /muse2/muse/wavetrack.cpp
parentd3a41b3460275ce44c744aa88227a31be44a49c7 (diff)
Various usability fixes. Please see ChangeLog.
Diffstat (limited to 'muse2/muse/wavetrack.cpp')
-rw-r--r--muse2/muse/wavetrack.cpp63
1 files changed, 60 insertions, 3 deletions
diff --git a/muse2/muse/wavetrack.cpp b/muse2/muse/wavetrack.cpp
index b55a67d6..6f38a6d4 100644
--- a/muse2/muse/wavetrack.cpp
+++ b/muse2/muse/wavetrack.cpp
@@ -31,19 +31,76 @@
#include "gconfig.h"
#include "al/dsp.h"
-// Added by Tim. p3.3.18
//#define WAVETRACK_DEBUG
namespace MusECore {
//---------------------------------------------------------
+// WaveTrack
+//---------------------------------------------------------
+
+WaveTrack::WaveTrack() : AudioTrack(Track::WAVE)
+{
+ setChannels(1);
+}
+
+WaveTrack::WaveTrack(const WaveTrack& wt, int flags) : AudioTrack(wt, flags)
+{
+ internal_assign(wt, flags | Track::ASSIGN_PROPERTIES);
+}
+
+void WaveTrack::internal_assign(const Track& t, int flags)
+{
+ if(t.type() != WAVE)
+ return;
+ //const WaveTrack& wt = (const WaveTrack&)t;
+
+ if(flags & ASSIGN_PARTS)
+ {
+ const PartList* pl = t.cparts();
+ for (ciPart ip = pl->begin(); ip != pl->end(); ++ip) {
+ Part* spart = ip->second;
+ bool clone = spart->events()->arefCount() > 1;
+ // This increments aref count if cloned, and chains clones.
+ // It also gives the new part a new serial number.
+ Part* dpart = newPart(spart, clone);
+ if(!clone) {
+ // Copy Events
+ MusECore::EventList* se = spart->events();
+ MusECore::EventList* de = dpart->events();
+ for (MusECore::iEvent i = se->begin(); i != se->end(); ++i) {
+ MusECore::Event oldEvent = i->second;
+ MusECore::Event ev = oldEvent.clone();
+ de->add(ev);
+ }
+ }
+
+ // TODO: Should we include the parts in the undo?
+ // dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it
+ // // so we must decrement it first :/
+ // // These will not increment ref count, and will not chain clones...
+ // // DELETETHIS: is the above comment still correct (by flo93)? i doubt it!
+ // operations.push_back(MusECore::UndoOp(MusECore::UndoOp::AddPart,dpart));
+
+ parts()->add(dpart);
+ }
+ }
+
+}
+
+void WaveTrack::assign(const Track& t, int flags)
+{
+ AudioTrack::assign(t, flags);
+ internal_assign(t, flags);
+}
+
+//---------------------------------------------------------
// fetchData
// called from prefetch thread
//---------------------------------------------------------
void WaveTrack::fetchData(unsigned pos, unsigned samples, float** bp, bool doSeek)
{
- // Added by Tim. p3.3.17
#ifdef WAVETRACK_DEBUG
printf("WaveTrack::fetchData %s samples:%lu pos:%u\n", name().toLatin1().constData(), samples, pos);
#endif
@@ -245,7 +302,7 @@ bool WaveTrack::getData(unsigned framePos, int channels, unsigned nframe, float*
return false;
// DELETETHIS 43
- // Removed by T356. Multiple out route cacheing now handled by AudioTrack::copyData and ::addData.
+ // Removed by T356. Multiple out route cacheing now handled by AudioTrack::copyData and ::addData. // REMOVE Tim.
/*
if (outRoutes()->size() > 1) {
if (bufferPos != framePos) {