From 9ead477419032ef47ae65dcc38610c0b5829261a Mon Sep 17 00:00:00 2001
From: Aaron Cuevas Lopez <aacuelo@teleco.upv.es>
Date: Thu, 16 Apr 2015 00:48:35 +0200
Subject: [PATCH] Fix event duplication when recording

---
 Source/Processors/GenericProcessor/GenericProcessor.cpp | 2 +-
 Source/Processors/GenericProcessor/GenericProcessor.h   | 3 +++
 Source/Processors/RecordNode/RecordEngine.h             | 2 --
 Source/Processors/RecordNode/RecordNode.cpp             | 2 +-
 4 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/Source/Processors/GenericProcessor/GenericProcessor.cpp b/Source/Processors/GenericProcessor/GenericProcessor.cpp
index c6348e85b..d630af925 100755
--- a/Source/Processors/GenericProcessor/GenericProcessor.cpp
+++ b/Source/Processors/GenericProcessor/GenericProcessor.cpp
@@ -705,7 +705,7 @@ int GenericProcessor::processEventBuffer(MidiBuffer& events)
             else
             {
 
-                if (*dataptr == TTL &&    // a TTL event
+                if (isWritableEvent(*dataptr) &&    // a TTL event
                     getNodeId() < 900 && // not handled by a specialized processor (e.g. AudioNode))
                     *(dataptr+4) > 0)    // that's flagged for saving
                 {
diff --git a/Source/Processors/GenericProcessor/GenericProcessor.h b/Source/Processors/GenericProcessor/GenericProcessor.h
index 936e5fa4a..cda34d638 100755
--- a/Source/Processors/GenericProcessor/GenericProcessor.h
+++ b/Source/Processors/GenericProcessor/GenericProcessor.h
@@ -28,6 +28,9 @@ enum ChannelType {HEADSTAGE_CHANNEL = 0, AUX_CHANNEL = 1, ADC_CHANNEL = 2, EVENT
                   ELECTRODE_CHANNEL = 4,  MESSAGE_CHANNEL = 5 
                  };
 
+//defines which events are writable to files
+#define isWritableEvent(ev) (((int)(ev) == GenericProcessor::TTL) || ((int)(ev) == GenericProcessor::MESSAGE) || ((int)(ev) == GenericProcessor::BINARY_MSG))
+
 #include "../../../JuceLibraryCode/JuceHeader.h"
 #include "../Editors/GenericEditor.h"
 #include "../Parameter/Parameter.h"
diff --git a/Source/Processors/RecordNode/RecordEngine.h b/Source/Processors/RecordNode/RecordEngine.h
index c968242f9..44d48163b 100644
--- a/Source/Processors/RecordNode/RecordEngine.h
+++ b/Source/Processors/RecordNode/RecordEngine.h
@@ -41,8 +41,6 @@
 #define strParameter(i,v) if ((parameter.id == i) && (parameter.type == EngineParameter::STR)) \
         v = parameter.strParam.value
 
-#define isWritableEvent(ev) (ev == GenericProcessor::TTL) || (ev == GenericProcessor::MESSAGE) || (ev == GenericProcessor::BINARY_MSG)
-
 struct SpikeRecordInfo
 {
     String name;
diff --git a/Source/Processors/RecordNode/RecordNode.cpp b/Source/Processors/RecordNode/RecordNode.cpp
index 108c04b55..dd133b6dd 100755
--- a/Source/Processors/RecordNode/RecordNode.cpp
+++ b/Source/Processors/RecordNode/RecordNode.cpp
@@ -421,7 +421,7 @@ void RecordNode::handleEvent(int eventType, MidiMessage& event, int samplePositi
     {
         if (isWritableEvent(eventType))
         {
-            if (event.getRawData()+4 > 0) // saving flag > 0 (i.e., event has not already been processed)
+            if (*(event.getRawData()+4) > 0) // saving flag > 0 (i.e., event has not already been processed)
             {
                 EVERY_ENGINE->writeEvent(eventType, event, samplePosition);
             }
-- 
GitLab