예제 #1
0
 /**
  * Reads channels informations
  * 
  * @return array $channels
  */
 public function readChannels()
 {
     $channels = array();
     for ($i = 0; $i < 64; $i++) {
         $channel = new Channel();
         $channel->setProgram($this->reader->readInt());
         $channel->setVolume($this->toChannelShort($this->reader->readByte()));
         $channel->setBalance($this->toChannelShort($this->reader->readByte()));
         $channel->setChorus($this->toChannelShort($this->reader->readByte()));
         $channel->setReverb($this->toChannelShort($this->reader->readByte()));
         $channel->setPhaser($this->toChannelShort($this->reader->readByte()));
         $channel->setTremolo($this->toChannelShort($this->reader->readByte()));
         $channel->setBank($i == 9 ? Channel::DEFAULT_PERCUSSION_BANK : Channel::DEFAULT_BANK);
         if ($channel->getProgram() < 0) {
             $channel->setProgram(0);
         }
         $channels[] = $channel;
         $this->reader->skip(2);
     }
     return $channels;
 }
예제 #2
0
 private function checkChannels()
 {
     for ($tc = 0; $tc < count($this->tempChannels); $tc++) {
         $tempChannel = $this->tempChannels[$tc];
         if ($tempChannel->getTrack() > 0) {
             $channelExists = false;
             for ($c = 0; $c < count($this->channels); $c++) {
                 $channel = $this->channels[$c];
                 $channelRoute = $this->channelRouter->getRoute($channel->getChannelId());
                 if ($channelRoute !== null) {
                     if ($channelRoute->getChannel1() == $tempChannel->getChannel() || $channelRoute->getChannel2() == $tempChannel->getChannel()) {
                         $channelExists = true;
                     }
                 }
             }
             if (!$channelExists) {
                 $channel = new Channel();
                 $channel->setChannelId(count($this->channels) + 1);
                 $channel->setProgram($tempChannel->getInstrument());
                 $channel->setVolume($tempChannel->getVolume());
                 $channel->setBalance($tempChannel->getBalance());
                 $channel->setName('#' . $channel->getChannelId());
                 $channel->setBank($tempChannel->getChannel() == 9 ? Channel::DEFAULT_PERCUSSION_BANK : Channel::DEFAULT_BANK);
                 $channelRoute = new ChannelRoute($channel->getChannelId());
                 $channelRoute->setChannel1($tempChannel->getChannel());
                 $channelRoute->setChannel2($tempChannel->getChannel());
                 for ($tcAux = $tc + 1; $tcAux < count($this->tempChannels); $tcAux++) {
                     $tempChannelAux = $this->tempChannels[$tcAux];
                     if ($tempChannel->getTrack() == $tempChannelAux->getTrack()) {
                         if ($channelRoute->getChannel2() == $channelRoute->getChannel1()) {
                             $channelRoute->setChannel2($tempChannelAux->getChannel());
                         } else {
                             $tempChannelAux->setTrack(-1);
                         }
                     }
                 }
                 $this->channelRouter->configureRoutes($channelRoute, $tempChannel->getChannel() == 9);
                 $this->channels[] = $channel;
             }
         }
     }
 }