iammordaty/key-tools

KeyTools 是一个库,允许您在记谱法之间转换音乐调性。此外,KeyTools 允许您计算用于和声混音的匹配调性。

0.8.2 2020-03-03 14:37 UTC

This package is auto-updated.

Last update: 2024-09-21 05:23:40 UTC


README

KeyTools 是一个库,允许您在记谱法之间转换音乐调性。此外,KeyTools 允许您计算用于和声混音的匹配调性。

支持记谱法

  • Camelot Key
  • Open Key
  • 音乐
  • 由 Beatport 使用的音乐
  • 由 Essentia 流媒体提取器使用的音乐

KeyTools 基于由 @mossspence 编写的代码,代码可在 此处 找到。

目录

安装

安装此库最简单的方法是通过 composer

$ composer require iammordaty/key-tools

要求

  • PHP 7.1 及更高版本

用法

以下示例显示了如何计算新的调性。

use KeyTools\KeyTools;

$keyTools = new KeyTools();

echo $keyTools->calculateKey('3A'); // "3A"
echo $keyTools->calculateKey('3A', 1); // "4A"
echo $keyTools->calculateKey('3A', 2); // "5A"
echo $keyTools->calculateKey('3A', -1); // "2A"
echo $keyTools->calculateKey('3A', 0, true); // "3B"

KeyTools 可以返回带有前导零的调性 - 只需将参数 leading_zero 设置为 true,如下例所示。请注意,此设置仅适用于 Camelot Key 和 Open Key 记谱法。

use KeyTools\KeyTools;

$keyTools = new KeyTools([ 
    'leading_zero' => true, 
    'notation' => KeyTools::NOTATION_CAMELOT_KEY, 
]);

echo $keyTools->calculateKey('3A'); // "03A"
echo $keyTools->calculateKey('3A', 1); // "04A"
echo $keyTools->calculateKey('3A', 2); // "05A"
echo $keyTools->calculateKey('3A', -1); // "02A"
echo $keyTools->calculateKey('3A', 0, true); // "03B"

您还可以使用缩写方法来计算新的调性

echo $keyTools->noChange('3A'); // "3A"
echo $keyTools->perfectFifth('3A'); // "4A"
echo $keyTools->wholeStep('3A'); // "5A"
echo $keyTools->perfectFourth('3A'); // "2A"
echo $keyTools->relativeMinorToMajor('3A'); // "3B"

此外,在记谱法之间转换调性也很简单

echo $keyTools->convertKeyToNotation('Fmin', KeyTools::NOTATION_CAMELOT_KEY); // "4A"
echo $keyTools->convertKeyToNotation('Fmin', KeyTools::NOTATION_OPEN_KEY); // "9M"
echo $keyTools->convertKeyToNotation('Fmin', KeyTools::NOTATION_MUSICAL); // = "Fm"

KeyTools 允许通过合适的方法对调性和记谱法进行验证...

$key = 'Fmin';
$notation = KeyTools::NOTATION_CAMELOT_KEY;

$keyTools = new KeyTools();

if (!$keyTools->isValidKey($key)) {
    exit('Invalid key');
}

if (!$keyTools->isSupportedNotation($notation)) {
    exit('Unsupported notation');
}

echo $keyTools->convertKeyToNotation($key, $notation); // "4A"

... 或者通过抛出适当的异常

use KeyTools\Exception\InvalidKeyException;
use KeyTools\Exception\UnsupportedNotationException;

$key = 'Fmin';
$notation = KeyTools::NOTATION_CAMELOT_KEY;

try {
    $keyTools = new KeyTools();

    echo $keyTools->convertKeyToNotation($key, $notation); // "4A"
} catch (InvalidKeyException | UnsupportedNotationException $e) {
    echo $e->getMessage();
}

测试

phpunit.xml.dist 文件复制到 phpunit.xml,并使用 PHPUnit 运行测试

$ ./vendor/bin/phpunit

更多信息

许可证

iammordaty/key-tools 采用 MIT 许可证授权。