diff options
Diffstat (limited to 'src/engine/MachineMutation.cpp')
-rw-r--r-- | src/engine/MachineMutation.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/src/engine/MachineMutation.cpp b/src/engine/MachineMutation.cpp deleted file mode 100644 index 3c899bc..0000000 --- a/src/engine/MachineMutation.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* This file is part of Machina. - * Copyright (C) 2007 Dave Robillard <http://drobilla.net> - * - * Machina is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * Machina is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include <iostream> -#include <cstdlib> -#include "machina/Edge.hpp" -#include "machina/Machine.hpp" -#include "machina/MachineMutation.hpp" -#include "machina/ActionFactory.hpp" - -using namespace std; - -namespace Machina { -namespace Mutation { - - -void -Compress::mutate(Machine& machine) -{ - // Trim disconnected nodes - for (Machine::Nodes::iterator i = machine.nodes().begin(); i != machine.nodes().end() ;) { - Machine::Nodes::iterator next = i; - ++next; - - if ((*i)->edges().empty()) - machine.remove_node(*i); - - i = next; - } -} - - -void -AddNode::mutate(Machine& machine) -{ - // Create random node - SharedPtr<Node> node(new Node(1.0)); - uint8_t note = rand() % 128; - node->set_enter_action(ActionFactory::note_on(note)); - node->set_exit_action(ActionFactory::note_off(note)); - machine.add_node(node); - - // Add as a successor to some other random node - SharedPtr<Node> tail = machine.random_node(); - if (tail && tail != node) - tail->add_edge(boost::shared_ptr<Edge>(new Edge(tail, node))); -} - - -void -RemoveNode::mutate(Machine& machine) -{ - SharedPtr<Node> node = machine.random_node(); - machine.remove_node(node); -} - - -void -AdjustNode::mutate(Machine& machine) -{ - SharedPtr<Node> node = machine.random_node(); - if (node) { - SharedPtr<MidiAction> enter_action = PtrCast<MidiAction>(node->enter_action()); - SharedPtr<MidiAction> exit_action = PtrCast<MidiAction>(node->exit_action()); - if (enter_action && exit_action) { - const uint8_t note = rand() % 128; - enter_action->event()[1] = note; - exit_action->event()[1] = note; - } - node->set_changed(); - } -} - - -void -AddEdge::mutate(Machine& machine) -{ - SharedPtr<Node> tail = machine.random_node(); - SharedPtr<Node> head = machine.random_node(); - - if (tail && head && tail != head && !tail->connected_to(head)) - tail->add_edge(boost::shared_ptr<Edge>(new Edge(tail, head))); -} - - -void -RemoveEdge::mutate(Machine& machine) -{ - SharedPtr<Node> tail = machine.random_node(); - if (tail) - tail->remove_edge(tail->random_edge()); -} - - -void -AdjustEdge::mutate(Machine& machine) -{ - SharedPtr<Edge> edge = machine.random_edge(); - if (edge) - edge->set_probability(rand() / (float)RAND_MAX); -} - - -} // namespace Mutation -} // namespace Machina - |