ID = $assocArray['ID']; $this->Title = $assocArray['Title']; $this->Copyright = $assocArray['Copyright']; $temp = json_decode($assocArray['Parts'], associative: true, flags: JSON_THROW_ON_ERROR); foreach($temp as $part) $this->Parts[] = new TunePart($part); } public function Build(): string { $builder = "X: {$this->ID} T: {$this->Title} C: {$this->Copyright} L: 1/4"; $counter = 0; $previousTimeSignature = ""; $previousKeySignature = ""; foreach($this->Parts as $part) { $builder .= " P: {$this->Parts[$counter]->PartLetter} Part"; if($this->Parts[$counter]->TimeSignature != $previousTimeSignature) { $builder .= " M: {$this->Parts[$counter]->TimeSignature}"; $previousTimeSignature = $this->Parts[$counter]->TimeSignature; } if($this->Parts[$counter]->KeySignature != $previousKeySignature) { $builder .= " K: {$this->Parts[$counter]->KeySignature}"; $previousKeySignature = $this->Parts[$counter]->KeySignature; } $builder .= " {$part->ABCNotation}"; $counter = $counter + 1; } return $builder; } public function BuildSimple(): string { $builder = "X: {$this->ID}"; $builder .= " L: {$this->Parts[0]->TimeSignature} M: {$this->Parts[0]->KeySignature}"; $builder .= " {$this->Parts[0]->ABCNotation}"; return $builder; } }