xosofox / codesound
将东西变成音乐
1.1.1
2017-11-01 00:20 UTC
Requires (Dev)
- phpunit/phpunit: ^6.4
This package is auto-updated.
Last update: 2024-09-11 14:38:22 UTC
README
工作
将Note
对象添加到可以导入到波形文件的Sequence
中。
需要 "sox" http://sox.sourceforge.net/
使用sudo apt-get install sox
或brew install sox
音符按如下方式索引
- 0代表220 Hz的A音
- 12代表440 Hz的A音
- 24代表880 Hz的A音
示例
播放简单的A大调音阶
<?php
$alleMeineEntchen = [0, 2, 4, 5, [7, 1 / 2], [7, 1 / 2], 9, 9, 9, 9, [7, 1 / 2], [null, 1 / 2], 9, 9, 9, 9, [7, 1 / 2]];
$sequence = Sequence::fromTuples($alleMeineEntchen);
$player = new Player($sequence);
$dumper = new SoundDumper();
$dumper->dump($player, __DIR__.'/lala.ul', __DIR__.'/lala.wav');
工作原理
数字被转换为Note
对象。它们在音阶上的音符索引。它们还有长度,以四分音符、二分音符等给出(实际声音长度由播放器的BPM决定,见下文)
Note
对象被添加到一个包含所有音符的Sequence
中。
Sequence
可以在Player
中使用,其中可以调整速度和基本频率(默认220 Hz)。有了这些信息,Notes
的Sequence
可以转换成Tone
对象的列表。一个Tone
对象有一个实际长度(毫秒)和一个频率(赫兹)。
Dumper
可以将Tone
对象的列表转换成实际的媒体文件。sox
在这里被使用。
使用转换器将数字输入转换为“音乐”
Converter
的任务是将给定的数字输入(文件大小、散列、代码行数等)转换为音符。通过传递一些选项(待定,如何将文件大小映射到长度等),它将创建可以添加到序列中的Note
实例。
待办事项
递归遍历目录并查看文件。
每个文件确定要播放的声音。
文件大小确定声音的长度。
文件散列(md5)确定音调。
为了听起来“和谐”,散列不会直接转换为频率。
它转换为A大调音阶上的一个音符。