Вверх ↑
Ответов: 99
Рейтинг: 4
#1: 2022-10-27 19:06:09 ЛС | профиль | цитата
Существует этакий жанр музыки, чем-то похожий на Chiptune, под названием "Bytebeat".
Заключается он в создании музыки (хотя не обязательно музыки, можно и звук который колонки поломает ) с помощью математических выражений.
Почитать про это можно здесь: http://canonical.org/~kragen/bytebeat/ (там кстати есть видео)
Вообщем, недавно я задался вопросом "можно ли сделать это в HiAsm?" и ответ ясное дело что да, однако как оказалось это просто так не выйдет.
Я решил сделать это используя используя проект консольной программы, а также компоненты For, MathParse и Converter (в режиме IntToChar). Решил использовать следующее выражение: t&t››8
Решил проверить свою программу именно на этом выражении, и поместить его в MathParse (где вся магия и будет происходить). Однако с t итак ясны дела: MathParse фиг знает что это такое. Поэтому заменил t на %1.
Сама программа просто запускает счётчик от 0 до 240000 (решил использовать частоту дискретизации 8000, и сгенерировать 30 секунд аудио), потом использует его как %1 в выражении, и переводит результат в символ, который потом выводится в консоль.
Компилирую, открываю командную строку и перенаправляю данные в файл. Открываю Audacity чтобы посмотреть, если получилось. И увидел я там очень медленную пилообразную волну, что совсем мне не нужно.
Позже оказалось что MathParse обрабатывает операторы ›› и ‹‹ на том же уровне что и &, | и !. Поменял выражение: t&(t››8) и теперь всё нормально работает.
Кстати, вот сама программа:
Add(Console,2953706,21,105)
{
link(onStart,14894531:doFor,[])
}
Add(Convertor,16410013,294,105)
{
Mode=4
link(onResult,2953706:doWrite,[(366,111)(366,99)(9,99)(9,111)])
}
Add(For,14894531,112,105)
{
End=240000
link(onEvent,3816027:doCalc,[])
}
Add(MathParse,3816027,203,105)
{
DataCount=1
MathStr="%1&(%1››8)"
ResultType=0
link(onResult,16410013:doConvert,[])
}
В интернете есть целая куча разных Bytebeat выражений, однако те что Си-совместимы (означает что выражение будет исправно работать в программе написанная на Си) лучше всего работают. Однако оператор % в таких нужно заменить на mod, иначе даже они работать не будут. Выражения с тернарными операторами (? и :) по-любому работать не будут. (если только не придумать другое выражение, которое будет выводить похожий результат и не использовать эти самые операторы)
карма: 0

0
Редактировалось 3 раз(а), последний 2022-10-27 19:12:36