31EDO Piano Необычная клавиатура, на которой можно сыграть в строе «31 ступень в октаве»
Почему 31? Это много или мало?
Строй 31EDO позволяет достаточно точно воспроизводить натуральные гармоники от 1 до 16 (в т.ч. 13-я — с небольшой погрешностью) и их соотношения.
Можно играть обычные мелодии, а можно обогатить их микротоновыми созвучиями. Любой музыкант сможет распознать на слух мажорное и минорное трезвучия (соотношения частот 4:5:6 и 10:12:15, соответственно). Но не всем знакомы, к примеру, "субминорное" (6:7:9) или "нейтральное" (18:22:27) трезвучия, которые встречаются в индийской и арабской музыке. На клавиатуре 31EDO их можно сыграть, отступив от нижней ноты 10 и 18; 8 и 18; 7 и 18; 9 и 18 ступеней соответственно.
Ещё одним преимуществом строя 31EDO является то, что одна его ступень - 1/31 октавы - достаточно велика, она заметно больше коммы 81/80, что позволяет различать диатонический и хроматический полутона (3 и 2 ступени, соответственно; здесь B# и С — разные ноты) и не задумываться о различии между "большим тоном" (9/8) и "малым тоном" (10/9), т.е. этот строй является среднетоновым.
Нарисуйте любую форму звуковой волны и тут же отредактируйте её спектр — преобразование Фурье вычисляется «на лету».
В данном примере клавишам, которые соответствуют гармоникам от 1 до 16 от ноты "До", назначены цифровые и буквенные клавиши ПК.
31edo.png (16.02 KiB) Viewed 9444 times
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Posted: Mon Feb 19, 2018 10:12 pm
by iHs
31EDO Piano Версия 0.1
Начальная версия.
Пока не удаётся наладить работу мультитача на Android-устройствах. Страшный код работы с клавиатурой. Нет подсветки нажатых клавиш. Но оно работает!
Просьба к админам: пожалуйста, сделайте возможность добавления файлов с расширением .pixi. Всё-таки профильный форум
Да, и хочу заметить, в языке Pixilang очень не хватает оператора for. Было бы удобнее - не загромождать программу строками инициализации и инкремента, которые можно и забыть дописать. Плюс большая совместимость с языком Си. Потом останется только объявить переменные и функции, расставить ; везде где надо - и можно компилировать по-настоящему.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Posted: Mon Mar 19, 2018 11:15 am
by NightRadio
пожалуйста, сделайте возможность добавления файлов с расширением .pixi. Всё-таки профильный форум
Добавил. Но я все-таки рекомендую упаковывать любые файлы программ в ZIP.
Да, и хочу заметить, в языке Pixilang очень не хватает оператора for. Было бы удобнее - не загромождать программу строками инициализации и инкремента, которые можно и забыть дописать. Плюс большая совместимость с языком Си. Потом останется только объявить переменные и функции, расставить ; везде где надо - и можно компилировать по-настоящему.
Увы, для совместимости с Си тут многого не хватает. При этом while {} как раз таки идеально совместим с Си :)
Конструкция for() {} есть в планах очень давно, но времени на реализацию до сих пор не нашлось. Может быть, в будущих версиях...
Либо кто-то сделает это за меня - исходники Pixilang открыты.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Posted: Fri Aug 10, 2018 11:04 pm
by iHs
31EDO Piano Версия 0.5
Теперь можно играть с клавиатуры ПК. Удерживая любую клавишу мышью, нажмите кнопку на клавиатуре, чтобы назначить её для данной ноты, или пробел, чтобы удалить назначенные клавиши
При выходе из программы тембр и назначенные клавиши сохраняются в файл "31.dat", при повторном входе данные загружаются
Затухание звука сделано не простым изменением амплитуды, а фильтром нижних частот, т.е. динамически меняется его тембр (если эта опция тормозит приложение, то её можно отключить; настройки, как обычно, находятся в начале кода)
Также можно настроить масштаб клавиатуры, высоту чёрных и серых клавиш
Программа становится все лучше!
Правда, у меня на компе отказывается нормально выходить. После нажатия ESC виснет на несколько секунд, а потом пишет, что потоки 0 и 1 не отвечали и были удалены принудительно. Сходу не понял, почему. Глянул в код - вроде бы выход корректно сделан.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Posted: Mon Aug 13, 2018 8:58 pm
by iHs
Я хотел сделать автосохранение/загрузку настроек, но был странный баг - при выходе из программы файл не сохранялся:
if EVT[ EVT_TYPE ] == EVT_QUIT {
stream = fopen("keys.txt", "wb")
if stream
{
fwrite(table, 256, stream)
fclose(stream)
}
halt
}
Оказалось, что этому препятствует строка thread_destroy(display_thrd). Стоило её перенести ниже, после всех операций с файлом, как файл стал создаваться без проблем. (В теме эта ошибка уже исправлена.)
Да, программа завершает работу долго (3-4 секунды на Windows и Android). На какой системе у вас была ошибка7
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Posted: Thu Aug 16, 2018 10:34 pm
by NightRadio
Оказалось, что этому препятствует строка thread_destroy(display_thrd).
Это происходит потому, что display_thrd не имеет выхода. Там внутри бесконечный while(), который нужно чем-то разрывать при выходе из программы. Автоматически это не делается, т.к. можно остановить thread не в том месте и потерять какие-то полезные данные.
Самый простой и логичный способ - писать что-то типа while( exit_request ) { ... }
а потом перед thread_destroy() пишем exit_request = 1
По истечении нескольких секунд потоки все-таки останавливаются принудительно, о чем Pixilang сообщает в консоли. Но, как я отметил выше, это аварийный небезопасный способ.
thread_destroy() не останавливает поток, а просто ждет, когда поток остановится, чтобы освободить его ресурсы.
И, кстати, если создать поток с флагом THREAD_FLAG_AUTO_DESTROY, то thread_destroy() вообще можно не выполнять - ресурсы освободятся сами, как только поток завершится.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Posted: Fri Aug 17, 2018 8:29 pm
by iHs
NightRadio wrote: ↑Thu Aug 16, 2018 10:34 pmthread_destroy() не останавливает поток, а просто ждет, когда поток остановится
Спасибо, исправлено.
Обнаружился баг в Notepad++: при поиске по Ctrl+F он не находит комбинацию квадратной скобки с пробелом, например "[ " или "] ".