ToneGenerator
Ну генератор и генератор, штука-то не хитрая: в SAMPLE_DATA Sound'а пишем синусоиду нужной частоты - играет тон..
Речь не совсем об этом: хотелось утилиту, чтоб не только включить/выключить тон, но и составить какие-то комбинации звуков, иными словами, чтоб не только пискнуть, но и хрюкнуть, если надо.
В результате нарисовался утилитный класс с методами бипа, паузы, громкости. Каждый из методов возвращает экземпляр Sound'а, в котором-то эти методы и реализованы. Фишка в том, что саунд этот не бросается их сразу выполнять, а складывает задания в очередь и сделает только когда наступит черед. В итоге, чтобы получить комбинацию звуков, просто "нанизываем" цепочку вызовов на экземпляр. Например, new Beeper().beep().pause(0.3).beep(0.2, 2000).play(); проиграет дефолтный бип и через 0,3 сек. бип с заданной частотой/длительностью.
Надо-не надо, но до кучи прикрутил проигрывание последовательности из строки (в стиле "C:0.2,D:0.2,E:0.2") и из массива частот, благо в такой схеме это не вопрос ни разу. Строки с цифрами ("300:0.5,400:0.2") и строки без указания длительности ("C,D,600,F") тоже проходят.
Практическая ценность этой шняги, понятное дело, не велика, но схема с созданием цепочек мне показалась достаточно интересной, чтобы написать сюда. Сама схема навеяна твинером от Philippe, там твины также нанизываются друг на друга - очень удобно. К слову, FD для такого расклада и автокомплит поддерживает.
демка, дока
UPD: небольшой рефакторинг (класс-обертка со статическими методами создания саундов явно лишний)
Всего комментариев 11
Комментарии
31.03.2011 18:20 | |
Красота. Хотелось бы еще влиять на тональность звука.
|
31.03.2011 18:22 | |
Круть! А сделаешь такую? Я от этой штуки без ума.
|
31.03.2011 18:37 | |
31.03.2011 20:43 | |
Дешевле, конечно! Путем увеличения трафика пользователя. Было бы прекрасно, если бы сам класс мог такое программно вытворять.
У меня даже навернулась ностальгическая слеза. В MSX BASIC примерно так же можно было составлять несложные мелодии. |
31.03.2011 21:00 | |
dimarik, напиши )
|
31.03.2011 22:12 | |
Клёво - практическое использование fluent interface )
|
31.03.2011 23:05 | |
iNils, если только в TODO список добавить. Но там уже и так много еще не реализованных идей.
|
01.04.2011 09:28 | |
01.04.2011 14:35 | |
Обновил(-а) silin 06.04.2011 в 00:18
|
02.04.2011 12:41 | |
AudioTool - круть вообще. Практически Propellerhead Reason. Звук конечно не айс, но для набросков - хорошая вещь.
|
Последние записи от silin
- Equalizer (22.06.2011)
- WaveSynthesizer (05.04.2011)
- ToneGenerator (31.03.2011)
- 3D фреймворк (24.10.2009)
- Глобальный бродкастер (04.07.2009)