iammordaty / key-tools
KeyTools 是一个库,允许您在记谱法之间转换音乐调性。此外,KeyTools 允许您计算用于和声混音的匹配调性。
0.8.2
2020-03-03 14:37 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^7
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
更多信息
- 和声混音概述和教程
- "和声混音是什么?" - DJ Endo 的教程
- "数字 DJing:和声混音" - Radley Marx 的教程
- Open Key 记谱法
- Camelot 轮盘图(图片)
- 和声混音的更多可能性(图片)
- Essentia - 用于音频和音乐分析、描述和合成的 C++ 库
- Essentia 流媒体提取器音乐命令行工具
许可证
iammordaty/key-tools 采用 MIT 许可证授权。