Browse Source

db can now handle variants of tunes

master
Cerys 4 weeks ago
parent
commit
e7d0f15eed
  1. 50
      App/Dataclasses/ABCWrapper.php
  2. 21
      App/Dataclasses/DatabaseFolkTuneDetails.php
  3. 41
      App/Dataclasses/TuneVariant.php
  4. 17
      App/Dataclasses/TuneVariantPart.php

50
App/Dataclasses/ABCWrapper.php

@ -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;
}
}

21
App/Dataclasses/DatabaseFolkTuneDetails.php

@ -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'];
}
}

41
App/Dataclasses/TuneVariant.php

@ -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;
}
}

17
App/Dataclasses/TuneVariantPart.php

@ -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…
Cancel
Save