public function configureRoutes(ChannelRoute $route, $percussionChannel) { $conflictingRoutes = null; foreach ($this->midiChannels as $k => $channel) { if ($this->getRoute($channel->getChannelId()) == $route) { array_splice($this->midiChannels, $k, 1); } } // Always channel 9 for percussions if ($percussionChannel) { $route->setChannel1(ChannelRouter::PERCUSSION_CHANNEL); $route->setChannel2(ChannelRouter::PERCUSSION_CHANNEL); } else { // Use custom routes if ($route->getChannel1() >= 0) { if ($route->getChannel2() < 0) { $route->setChannel2($route->getChannel1()); } $conflictingRoutes = $this->findConflictingRoutes($route); } else { $freeChannels = $this->getFreeChannels(); $route->setChannel1(count($freeChannels) > 0 ? intval($freeChannels[0]) : ChannelRoute::NULL_VALUE); $route->setChannel2(count($freeChannels) > 1 ? intval($freeChannels[1]) : $route->getChannel1()); } } $this->midiChannels[] = $route; // Reconfigure conflicting routes if ($conflictingRoutes !== null) { foreach ($conflictingRoutes as $conflictingRoute) { $conflictingRoute->setChannel1(ChannelRoute::NULL_VALUE); $conflictingRoute->setChannel2(ChannelRoute::NULL_VALUE); $this->configureRoutes($conflictingRoute, false); } } }
protected function getChannelRoute($channelId) { $channelRoute = $this->channelRouter->getRoute($channelId); if (null === $channelRoute) { $channelRoute = new ChannelRoute(ChannelRoute::NULL_VALUE); $channelRoute->setChannel1(15); $channelRoute->setChannel2(15); } return $channelRoute; }
public function configureRouter(array $channels) { $this->router->resetRoutes(); foreach ($channels as $channel) { $channelRoute = new ChannelRoute($channel->getChannelId()); $channelRoute->setChannel1($this->getIntegerChannelParameter($channel, ChannelRoute::PARAMETER_CHANNEL_1)); $channelRoute->setChannel2($this->getIntegerChannelParameter($channel, ChannelRoute::PARAMETER_CHANNEL_2)); $this->router->configureRoutes($channelRoute, $channel->isPercussionChannel()); } }