4 changed files with 79 additions and 50 deletions
			
			
		@ -1,50 +0,0 @@ | 
				
			|||||
<?php | 
					 | 
				
			||||
 | 
					 | 
				
			||||
namespace App\Dataclasses; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
class ABCWrapper | 
					 | 
				
			||||
{ | 
					 | 
				
			||||
    public string $ID; | 
					 | 
				
			||||
    public string $Title; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public string $Source; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public string $TimeSignature; | 
					 | 
				
			||||
    public string $KeySignature; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public string $DefaultNoteLength = "1/8"; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public array $Parts; | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public function __construct(array $assocArray) | 
					 | 
				
			||||
    { | 
					 | 
				
			||||
        $this->ID = $assocArray['ID']; | 
					 | 
				
			||||
        $this->Title = $assocArray['Title']; | 
					 | 
				
			||||
        $this->Source = $assocArray['Copyright']; | 
					 | 
				
			||||
        $this->TimeSignature = $assocArray['TimeSignature']; | 
					 | 
				
			||||
        $this->KeySignature = $assocArray['KeySignature']; | 
					 | 
				
			||||
        $this->Parts = json_decode($assocArray['Parts'], true); | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
 | 
					 | 
				
			||||
 | 
					 | 
				
			||||
    public function Build(): string | 
					 | 
				
			||||
    { | 
					 | 
				
			||||
        $builder = "X: {$this->ID} | 
					 | 
				
			||||
T: {$this->Title} | 
					 | 
				
			||||
S: {$this->Source} | 
					 | 
				
			||||
M: {$this->TimeSignature} | 
					 | 
				
			||||
K: {$this->KeySignature} | 
					 | 
				
			||||
L: {$this->DefaultNoteLength}"; | 
					 | 
				
			||||
        $counter = 0; | 
					 | 
				
			||||
        $letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; | 
					 | 
				
			||||
        foreach($this->Parts as $part) | 
					 | 
				
			||||
        { | 
					 | 
				
			||||
            $builder .= " | 
					 | 
				
			||||
P: {$letters[$counter]} Part | 
					 | 
				
			||||
{$part}"; | 
					 | 
				
			||||
            $counter = $counter + 1; | 
					 | 
				
			||||
        } | 
					 | 
				
			||||
        return $builder; | 
					 | 
				
			||||
    } | 
					 | 
				
			||||
} | 
					 | 
				
			||||
@ -0,0 +1,21 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace App\Dataclasses; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class DatabaseFolkTuneDetails | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public string $ID; | 
				
			||||
 | 
					    public string $Title; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public string $Copyright; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public array $Variants; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public function __construct(array $assocArray) | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $this->ID = $assocArray['ID']; | 
				
			||||
 | 
					        $this->Title = $assocArray['Title']; | 
				
			||||
 | 
					        $this->Copyright = $assocArray['Copyright']; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,41 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace App\Dataclasses; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class TuneVariant | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    private DatabaseFolkTuneDetails $Tune; | 
				
			||||
 | 
					    public string $ID; | 
				
			||||
 | 
					    public array $Parts; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public function __construct(DatabaseFolkTuneDetails $tuneDetails, array $assocArray) | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $this->ID = $assocArray['ID']; | 
				
			||||
 | 
					        $this->Tune = $tuneDetails; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        $temp = json_decode($assocArray['Parts'], associative: true, flags: JSON_THROW_ON_ERROR); | 
				
			||||
 | 
					        foreach($temp as $part) | 
				
			||||
 | 
					            $this->Parts[] = new TuneVariantPart($part); | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public function Build(): string | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $builder = "X: {$this->Tune->ID}.{$this->ID} | 
				
			||||
 | 
					T: {$this->Tune->Title} | 
				
			||||
 | 
					S: {$this->Tune->Copyright} | 
				
			||||
 | 
					M: {$this->Parts[0]->TimeSignature} | 
				
			||||
 | 
					K: {$this->Parts[0]->KeySignature} | 
				
			||||
 | 
					L: 1/8"; | 
				
			||||
 | 
					        $counter = 0; | 
				
			||||
 | 
					        $letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; | 
				
			||||
 | 
					        foreach($this->Parts as $part) | 
				
			||||
 | 
					        { | 
				
			||||
 | 
					            $builder .= " | 
				
			||||
 | 
					P: {$letters[$counter]} Part | 
				
			||||
 | 
					{$part->ABCNotation}"; | 
				
			||||
 | 
					            $counter = $counter + 1; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        return $builder; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,17 @@ | 
				
			|||||
 | 
					<?php | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					namespace App\Dataclasses; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					class TuneVariantPart | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    public string $TimeSignature; | 
				
			||||
 | 
					    public string $KeySignature; | 
				
			||||
 | 
					    public string $ABCNotation; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    public function __construct(array $assocArray) | 
				
			||||
 | 
					    { | 
				
			||||
 | 
					        $this->TimeSignature = $assocArray['TimeSignature']; | 
				
			||||
 | 
					        $this->KeySignature = $assocArray['KeySignature']; | 
				
			||||
 | 
					        $this->ABCNotation = $assocArray['ABCNotation']; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue