31EDO Piano — Мини-синтезатор на Pixilang
31EDO Piano — Мини-синтезатор на Pixilang
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), т.е. этот строй является среднетоновым.
Нарисуйте любую форму звуковой волны и тут же отредактируйте её спектр — преобразование Фурье вычисляется «на лету».
Текущая версия 0.5 В данном примере клавишам, которые соответствуют гармоникам от 1 до 16 от ноты "До", назначены цифровые и буквенные клавиши ПК.
Необычная клавиатура, на которой можно сыграть в строе «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), т.е. этот строй является среднетоновым.
Нарисуйте любую форму звуковой волны и тут же отредактируйте её спектр — преобразование Фурье вычисляется «на лету».
Текущая версия 0.5 В данном примере клавишам, которые соответствуют гармоникам от 1 до 16 от ноты "До", назначены цифровые и буквенные клавиши ПК.
Last edited by iHs on Fri Nov 16, 2018 6:42 pm, edited 5 times in total.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
31EDO Piano
Версия 0.1
Начальная версия.
Пока не удаётся наладить работу мультитача на Android-устройствах. Страшный код работы с клавиатурой. Нет подсветки нажатых клавиш. Но оно работает!
Версия 0.1
Начальная версия.
Пока не удаётся наладить работу мультитача на Android-устройствах. Страшный код работы с клавиатурой. Нет подсветки нажатых клавиш. Но оно работает!
Last edited by iHs on Sun Mar 18, 2018 10:02 pm, edited 2 times in total.
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Отличная идея!
Re: 31EDO Piano — Мини-синтезатор на Pixilang
31EDO Piano
Версия 0.3
Версия 0.3
- Наконец-то работает мультитач
- Добавлена визуализация звука (можно отключить в начале файла) и нажатых клавиш
- Небольшая оптимизация
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Просьба к админам: пожалуйста, сделайте возможность добавления файлов с расширением .pixi. Всё-таки профильный форум
Да, и хочу заметить, в языке Pixilang очень не хватает оператора for. Было бы удобнее - не загромождать программу строками инициализации и инкремента, которые можно и забыть дописать. Плюс большая совместимость с языком Си. Потом останется только объявить переменные и функции, расставить ; везде где надо - и можно компилировать по-настоящему.
Да, и хочу заметить, в языке Pixilang очень не хватает оператора for. Было бы удобнее - не загромождать программу строками инициализации и инкремента, которые можно и забыть дописать. Плюс большая совместимость с языком Си. Потом останется только объявить переменные и функции, расставить ; везде где надо - и можно компилировать по-настоящему.
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Добавил. Но я все-таки рекомендую упаковывать любые файлы программ в ZIP.пожалуйста, сделайте возможность добавления файлов с расширением .pixi. Всё-таки профильный форум
Увы, для совместимости с Си тут многого не хватает. При этом while {} как раз таки идеально совместим с Си :)Да, и хочу заметить, в языке Pixilang очень не хватает оператора for. Было бы удобнее - не загромождать программу строками инициализации и инкремента, которые можно и забыть дописать. Плюс большая совместимость с языком Си. Потом останется только объявить переменные и функции, расставить ; везде где надо - и можно компилировать по-настоящему.
Конструкция for() {} есть в планах очень давно, но времени на реализацию до сих пор не нашлось. Может быть, в будущих версиях...
Либо кто-то сделает это за меня - исходники Pixilang открыты.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
31EDO Piano
Версия 0.5
Версия 0.5
- Теперь можно играть с клавиатуры ПК. Удерживая любую клавишу мышью, нажмите кнопку на клавиатуре, чтобы назначить её для данной ноты, или пробел, чтобы удалить назначенные клавиши
- При выходе из программы тембр и назначенные клавиши сохраняются в файл "31.dat", при повторном входе данные загружаются
- Затухание звука сделано не простым изменением амплитуды, а фильтром нижних частот, т.е. динамически меняется его тембр (если эта опция тормозит приложение, то её можно отключить; настройки, как обычно, находятся в начале кода)
- Также можно настроить масштаб клавиатуры, высоту чёрных и серых клавиш
- Небольшие улучшения производительности
Last edited by iHs on Fri Aug 17, 2018 8:17 pm, edited 3 times in total.
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Программа становится все лучше!
Правда, у меня на компе отказывается нормально выходить. После нажатия ESC виснет на несколько секунд, а потом пишет, что потоки 0 и 1 не отвечали и были удалены принудительно. Сходу не понял, почему. Глянул в код - вроде бы выход корректно сделан.
Правда, у меня на компе отказывается нормально выходить. После нажатия ESC виснет на несколько секунд, а потом пишет, что потоки 0 и 1 не отвечали и были удалены принудительно. Сходу не понял, почему. Глянул в код - вроде бы выход корректно сделан.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Я хотел сделать автосохранение/загрузку настроек, но был странный баг - при выходе из программы файл не сохранялся:
Но в другой программе всё работало!
Оказалось, что этому препятствует строка thread_destroy(display_thrd). Стоило её перенести ниже, после всех операций с файлом, как файл стал создаваться без проблем. (В теме эта ошибка уже исправлена.)
Да, программа завершает работу долго (3-4 секунды на Windows и Android). На какой системе у вас была ошибка7
Code: Select all
if EVT[ EVT_TYPE ] == EVT_QUIT
{
set_audio_callback(-1)
thread_destroy(display_thrd)
if storesettings
{
stream = fopen("31.dat", "wb")
if stream
{
fwrite(samp, 256, stream)
fwrite(keymap, 558, stream)
fclose(stream)
}
}
halt
}
Code: Select all
if EVT[ EVT_TYPE ] == EVT_QUIT {
stream = fopen("keys.txt", "wb")
if stream
{
fwrite(table, 256, stream)
fclose(stream)
}
halt
}
Да, программа завершает работу долго (3-4 секунды на Windows и Android). На какой системе у вас была ошибка7
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Это происходит потому, что display_thrd не имеет выхода. Там внутри бесконечный while(), который нужно чем-то разрывать при выходе из программы. Автоматически это не делается, т.к. можно остановить thread не в том месте и потерять какие-то полезные данные.Оказалось, что этому препятствует строка thread_destroy(display_thrd).
Самый простой и логичный способ - писать что-то типа while( exit_request ) { ... }
а потом перед thread_destroy() пишем exit_request = 1
По истечении нескольких секунд потоки все-таки останавливаются принудительно, о чем Pixilang сообщает в консоли. Но, как я отметил выше, это аварийный небезопасный способ.
thread_destroy() не останавливает поток, а просто ждет, когда поток остановится, чтобы освободить его ресурсы.
И, кстати, если создать поток с флагом THREAD_FLAG_AUTO_DESTROY, то thread_destroy() вообще можно не выполнять - ресурсы освободятся сами, как только поток завершится.
Re: 31EDO Piano — Мини-синтезатор на Pixilang
Спасибо, исправлено.NightRadio wrote: ↑Thu Aug 16, 2018 10:34 pmthread_destroy() не останавливает поток, а просто ждет, когда поток остановится
Обнаружился баг в Notepad++: при поиске по Ctrl+F он не находит комбинацию квадратной скобки с пробелом, например "[ " или "] ".