コード例 #1
0
ファイル: ChannelRouter.php プロジェクト: stdtabs/phptabs
 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);
         }
     }
 }
コード例 #2
0
 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;
 }
コード例 #3
0
 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());
     }
 }