/** * Reads Channel informations * * @param Song $song * @param Track $track * @param array $channels */ public function readChannel(Song $song, Track $track, $channels) { $gChannel1 = $this->reader->readInt() - 1; $gChannel2 = $this->reader->readInt() - 1; if ($gChannel1 >= 0 && $gChannel1 < count($channels)) { $channel = new Channel(); $gChannel1Param = new ChannelParameter(); $gChannel2Param = new ChannelParameter(); $gChannel1Param->setKey("channel-1"); $gChannel1Param->setValue("{$gChannel1}"); $gChannel2Param->setKey("channel-2"); $gChannel2Param->setValue($gChannel1 != 9 ? "{$gChannel2}" : "{$gChannel1}"); $channel->copyFrom($channels[$gChannel1]); for ($i = 0; $i < $song->countChannels(); $i++) { $channelAux = $song->getChannel($i); for ($n = 0; $n < $channelAux->countParameters(); $n++) { $channelParameter = $channelAux->getParameter($n); if ($channelParameter->getKey() == "{$gChannel1}") { if ("{$gChannel1}" == $channelParameter->getValue()) { $channel->setChannelId($channelAux->getChannelId()); } } } } if ($channel->getChannelId() <= 0) { $channel->setChannelId($song->countChannels() + 1); $channel->setName($this->createChannelNameFromProgram($song, $channel)); $channel->addParameter($gChannel1Param); $channel->addParameter($gChannel2Param); $song->addChannel($channel); } $track->setChannelId($channel->getChannelId()); } }
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; } } } }