Проекты
GameDev.ru / Проекты / Форум / Компактный синтезатор MIDI

Компактный синтезатор MIDI

Страницы: 1 2 311 12 Следующая »
gammakerПостоялецwww6 июня 201414:26#0
Платформы: Windows, Linux, FreeBSD, браузер (Emscripten).
Библиотеки: вывод звука через DirectSound/OpenAL/WebAudio; велосипедные контейнеры Intra.
Исходники: на github
Лицензия: MIT

Описание:
Пишу синтезатор музыки для своего движка. Началось всё с того, что я решил генерировать всё процедурно. Заинтересовался, как генерировать звук. И после некоторых экспериментов решил поддержку midi прикрутить.
Программа консольная. Чтобы прослушать нужный файл, надо просто перенести его на exe'шник. Если вторым параметром командной строки передать путь, то результат синтеза будет сохраняться в этом файле.

Недоработки:
Многие инструменты не реализованы и вместо них звучат другие. Ситуация недавно кардинально изменилась в лучшую сторону, но пока мало типов ударников.

Сжатый компактный бинарник для Windows - всего 53 КБ!
В репозитории лежит моя библиотека и некоторые другие проекты. Либу для линковки со старой msvcrt.lib я в репозиторий не положил, поэтому собранная без неё версия получится не такая компактная, как та, которая по ссылке выше.
В последней версии куча всего нового, читайте пост #130.
Пощупать можно прямо в браузере.

+ Старые версии и пробные midi

Правка: 29 июля 2017 1:31

Роман ШуваловУчастникwww6 июня 201414:35#1
> планируется Linux
Ждём-с.

> Может кто-нибудь знает, как синтезировать звук пианино?
А погуглить? http://www.soundonsound.com/sos/Oct02/articles/synthsecrets10.asp

gammakerПостоялецwww6 июня 201414:37#2
Роман Шувалов
> Ждём-с.
В смысле? У тебя Linux и ты не можешь его запустить? По идее Wine должен помочь.

Роман Шувалов
> А погуглить? http://www.soundonsound.com/sos/Oct02/articles/synthsecrets10.asp
О спасибо. Судя по всему тут простой формулой не отделаться, нужно время, чтобы разобраться. Надеюсь, это не замедлит мой синтезатор в 10 раз?

Правка: 6 июня 2014 14:39

Роман ШуваловУчастникwww6 июня 201414:42#3
Вайн у меня неподготовлен и мало что может запускать, в данном случае просит MSVCP120.dll - лень качать. Теоретически да, можно его привести в порядок и он будет работать прилично, но я лучше дождусь линукс-версии :)

> Надеюсь, это не замедлит мой синтезатор в 10 раз?
Замедлит.

Правка: 6 июня 2014 14:43

gammakerПостоялецwww6 июня 201414:49#4
Роман Шувалов
> Вайн у меня неподготовлен и мало что может запускать, в данном случае просит
> MSVCP120.dll - лень качать.
Так-так-так, я же вроде настроил проект, чтобы не требовал. Сейчас поправлю...
gammakerПостоялецwww6 июня 201415:11#5
Исправил. Попробуй теперь скачать по той же ссылке. Вроде теперь не должно ничего требовать.

Роман Шувалов
> Замедлит.
Если прям в 10 раз или больше, то стриминг уже не потянет. Может есть что-то попроще, одной-двумя формулами?

Правка: 6 июня 2014 15:15

nesПостоялецwww6 июня 201416:35#6
gammaker
Крутяк, а чего решил использовать DirectSound а не waveOut?
Роман ШуваловУчастникwww6 июня 201416:46#7
gammaker
> Может есть что-то попроще, одной-двумя формулами?
Поставь LMMS (Linux MultiMedia Studio, не пугайся названию, версия под винду имеется), там есть синтезатор Triple Oscillator, вот такой:

Изображение

С его помощью можно очень много чего интересного нагенерировать. Насчёт фортепиано не знаю, но, вполне вероятно, что-то похожее вполне осуществимо.

Принцип работы простейший - имеется три генератора, форму волны выбираем сами. Взаимодействие определяется кнопочками - один генератор модулировать фазу другого, или модулировать частоту другого, или еще там всякие разные режимы есть. В общем, можно поиграться. И куча пресетов имеется.

На его примере можно послушать, каких результатов можно достичь такими функциями, и, если понравится, реализовать их уже самостоятельно.

P.S. Новая версия на вайне запустилась, работает. ДЛЛшки не просит. Ок.

Правка: 6 июня 2014 16:47

gammakerПостоялецwww6 июня 201416:48#8
nes
> Крутяк, а чего решил использовать DirectSound а не waveOut?
У меня в движке был DirectSound, я прямо в демке с игрой делал синтезатор. Потом решил создать новый проект в решении и перенёс туда как было. К тому же я ещё стриминг планирую сделать, только не уверен, что после того, как я сделаю нормальное пианино, мой нетбук его потянет.
gammakerПостоялецwww6 июня 201416:55#9
Роман Шувалов
> Поставь LMMS (Linux MultiMedia Studio, не пугайся названию, версия под винду
> имеется), там есть синтезатор Triple Oscillator, вот такой:
Отлично, а то я уж думал самому подобную штуку делать. Похоже, что не придётся.

Роман Шувалов
> не пугайся названию, версия под винду имеется
Даже если бы название соответствовало, всё равно у меня Linux есть. Просто я на винду из-за новой студии пересел, а до этого много с линуксом сидел. Да и на виртуалке наверное можно было бы запустить.

gammakerПостоялецwww9 июня 201418:31#10
Вышла новая версия! Добавил кучу новых инструментов и улучшил существующие. Также исправил пару багов с громкостью и синхронизацией.
Теперь звучит несравнимо лучше, чем в предыдущей версии.
Правда производительность примерно в 3 раза упала. Ну и синтезатор стал менее компактный.
RadianTORПостоялецwww9 июня 201420:00#11
Прикольно. Звучит неплохо для компактного синтезатора.
Он с начало Синтезирует звуки инструментов, или целиком звуковую дорожку?
gammakerПостоялецwww9 июня 201420:32#12
radiantor
> Он с начало Синтезирует звуки инструментов, или целиком звуковую дорожку?
Синтезирует по ходу дела на месте. Ноты они разные и длятся по-разному, так что не думаю, что кеширование что-нибудь дало бы. Хотя можно попробовать кешировать ноту без огибающей, а потом уже её накладывать. А то на некоторых мелодиях синтезирует дольше, чем длится мелодия. Так стриминг не сделать будет.
RadianTORПостоялецwww9 июня 201420:48#13
gammaker
А, ну да, у тебя же миди. Я просто когда трекер делал простой, синтезировал сразу сэмплы и ими играл.
А из-за долгого процесса синтеза, у тебя, я подумал может ты сразу весь трек сводишь в волну в памяти, а потом уже запускаешь проигрывание этой волны средствами директсаунд.
gammakerПостоялецwww9 июня 201421:22#14
radiantor
> я подумал может ты сразу весь трек сводишь в волну в памяти, а потом уже
> запускаешь проигрывание этой волны средствами директсаунд.
А, вот ты о чём. Именно так и есть. Я создаю полностью волну, а потом только её воспроизвожу.

radiantor
> А, ну да, у тебя же миди.
А mid-файл это просто источник информации о нотах.

Правка: 9 июня 2014 21:26

Страницы: 1 2 311 12 Следующая »

/ Форум / Проекты / Оцените

2001—2018 © GameDev.ru — Разработка игр