Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $s_OriginalSequence = <<< END_SEQ
- A
- Asus7
- Csus add9
- Dmaj7
- F#m7
- G#
- C#dim no3
- END_SEQ;
- $s_TransposedUpSequence = <<< END_SEQ
- A#
- A#sus7
- C#sus add9
- D#maj7
- Gm7
- A
- Ddim no3
- END_SEQ;
- $s_TransposedDownSequence = <<< END_SEQ
- G#
- G#sus7
- Bsus add9
- C#maj7
- Fm7
- G
- Cdim no3
- END_SEQ;
- /**
- * Transpose a chord sequence.
- *
- * @param $s_Sequence The chord sequence to transpose.
- * @param $b_TransposeUp Transpose up or down.
- *
- * @return The transposed sequence.
- */
- function transposeChord($s_Sequence, $b_TransposeUp = True) {
- $a_Chords = array('A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#');
- return preg_replace_callback (
- '`([A-G]#?)`',
- function($a_Matches) use($a_Chords, $b_TransposeUp) {
- // Find the position in the chords array of the found chord.
- $a_ChordPositions = array_keys($a_Chords, $a_Matches[1], True);
- // Get the new chord position.
- $i_NewChordPosition = (count($a_Chords) + $a_ChordPositions[0] + ($b_TransposeUp ? 1 : -1)) % count($a_Chords);
- // Return the new chord position.
- return $a_Chords[$i_NewChordPosition];
- },
- $s_Sequence
- );
- }
- $s_TestTransposedUpSequence = transposeChord($s_OriginalSequence, True);
- $s_TestTransposedDownSequence = transposeChord($s_OriginalSequence, False);
- echo 'Original Sequence', PHP_EOL, $s_OriginalSequence, PHP_EOL, PHP_EOL, PHP_EOL;
- echo 'Transposed Up', PHP_EOL, $s_TransposedUpSequence, PHP_EOL, PHP_EOL;
- echo 'vs', PHP_EOL, PHP_EOL, $s_TestTransposedUpSequence, PHP_EOL, PHP_EOL;
- echo (($s_TransposedUpSequence === $s_TestTransposedUpSequence) ? 'Match' : 'Fail'), PHP_EOL, PHP_EOL, PHP_EOL;
- echo 'Transposed Down', PHP_EOL, $s_TransposedDownSequence, PHP_EOL, PHP_EOL;
- echo 'vs', PHP_EOL, PHP_EOL, $s_TestTransposedDownSequence, PHP_EOL, PHP_EOL;
- echo (($s_TransposedDownSequence === $s_TestTransposedDownSequence) ? 'Match' : 'Fail');
- ?>
- outputs ...
- Original Sequence
- A
- Asus7
- Csus add9
- Dmaj7
- F#m7
- G#
- C#dim no3
- Transposed Up
- A#
- A#sus7
- C#sus add9
- D#maj7
- Gm7
- A
- Ddim no3
- vs
- A#
- A#sus7
- C#sus add9
- D#maj7
- Gm7
- A
- Ddim no3
- Match
- Transposed Down
- G#
- G#sus7
- Bsus add9
- C#maj7
- Fm7
- G
- Cdim no3
- vs
- G#
- G#sus7
- Bsus add9
- C#maj7
- Fm7
- G
- Cdim no3
- Match
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement