#include <stdio.h>
#include "MessageNotein.h"
message::Object *MessageNotein::new_object(pd::Message *init_message, PdGraph *graph) {
return new MessageNotein(init_message, graph);
}
MessageNotein::MessageNotein(pd::Message *init_message, PdGraph *graph) :
RemoteMessageReceiver(0, 3, graph) {
if (init_message->is_float(0) &&
(init_message->get_float(0) >= 1.0f && init_message->get_float(0) <= 16.0f)) {
channel = (int) (init_message->get_float(0)-1.0f);
name = (char *) calloc(13, sizeof(char));
sprintf(name, "zg_notein_%i", channel);
} else {
channel = -1;
name = utils::copy_string((char *) "zg_notein_omni");
}
}
MessageNotein::~MessageNotein() {
free(name);
}
int MessageNotein::getChannel() {
return channel;
}
bool MessageNotein::isOmni() {
return (channel == -1);
}
void MessageNotein::process_message(int inlet_index, pd::Message *message) {
pd::Message *outgoing_message = PD_MESSAGE_ON_STACK(1);
if (isOmni()) {
outgoing_message->from_timestamp_and_float(message->get_timestamp(), message->get_float(2));
send_message(2, outgoing_message);
}
outgoing_message->from_timestamp_and_float(message->get_timestamp(), message->get_float(1));
send_message(1, outgoing_message);
outgoing_message->from_timestamp_and_float(message->get_timestamp(), message->get_float(0));
send_message(0, outgoing_message);
}