Платформы: Windows, Linux, FreeBSD, браузер (Emscripten).
Библиотеки: вывод звука через DirectSound/OpenAL/WebAudio; велосипедные контейнеры Intra.
Исходники: на github
Лицензия: MIT
Описание:
Пишу синтезатор музыки для своего движка. Началось всё с того, что я решил генерировать всё процедурно. Заинтересовался, как генерировать звук. И после некоторых экспериментов решил поддержку midi прикрутить.
Программа консольная. Чтобы прослушать нужный файл, надо просто перенести его на exe'шник. Если вторым параметром командной строки передать путь, то результат синтеза будет сохраняться в этом файле.
Недоработки:
Многие инструменты не реализованы и вместо них звучат другие. Ситуация недавно кардинально изменилась в лучшую сторону, но пока мало типов ударников.
Сжатый компактный бинарник для Windows - всего 53 КБ!
В репозитории лежит моя библиотека и некоторые другие проекты. Либу для линковки со старой msvcrt.lib я в репозиторий не положил, поэтому собранная без неё версия получится не такая компактная, как та, которая по ссылке выше.
В последней версии куча всего нового, читайте пост #130.
Пощупать можно прямо в браузере.
> планируется Linux
Ждём-с.
> Может кто-нибудь знает, как синтезировать звук пианино?
А погуглить? http://www.soundonsound.com/sos/Oct02/articles/synthsecrets10.asp
Роман Шувалов
> Ждём-с.
В смысле? У тебя Linux и ты не можешь его запустить? По идее Wine должен помочь.
Роман Шувалов
> А погуглить? http://www.soundonsound.com/sos/Oct02/articles/synthsecrets10.asp
О спасибо. Судя по всему тут простой формулой не отделаться, нужно время, чтобы разобраться. Надеюсь, это не замедлит мой синтезатор в 10 раз?
Вайн у меня неподготовлен и мало что может запускать, в данном случае просит MSVCP120.dll - лень качать. Теоретически да, можно его привести в порядок и он будет работать прилично, но я лучше дождусь линукс-версии :)
> Надеюсь, это не замедлит мой синтезатор в 10 раз?
Замедлит.
Роман Шувалов
> Вайн у меня неподготовлен и мало что может запускать, в данном случае просит
> MSVCP120.dll - лень качать.
Так-так-так, я же вроде настроил проект, чтобы не требовал. Сейчас поправлю...
Исправил. Попробуй теперь скачать по той же ссылке. Вроде теперь не должно ничего требовать.
Роман Шувалов
> Замедлит.
Если прям в 10 раз или больше, то стриминг уже не потянет. Может есть что-то попроще, одной-двумя формулами?
gammaker
Крутяк, а чего решил использовать DirectSound а не waveOut?
gammaker
> Может есть что-то попроще, одной-двумя формулами?
Поставь LMMS (Linux MultiMedia Studio, не пугайся названию, версия под винду имеется), там есть синтезатор Triple Oscillator, вот такой:
С его помощью можно очень много чего интересного нагенерировать. Насчёт фортепиано не знаю, но, вполне вероятно, что-то похожее вполне осуществимо.
Принцип работы простейший - имеется три генератора, форму волны выбираем сами. Взаимодействие определяется кнопочками - один генератор модулировать фазу другого, или модулировать частоту другого, или еще там всякие разные режимы есть. В общем, можно поиграться. И куча пресетов имеется.
На его примере можно послушать, каких результатов можно достичь такими функциями, и, если понравится, реализовать их уже самостоятельно.
P.S. Новая версия на вайне запустилась, работает. ДЛЛшки не просит. Ок.
nes
> Крутяк, а чего решил использовать DirectSound а не waveOut?
У меня в движке был DirectSound, я прямо в демке с игрой делал синтезатор. Потом решил создать новый проект в решении и перенёс туда как было. К тому же я ещё стриминг планирую сделать, только не уверен, что после того, как я сделаю нормальное пианино, мой нетбук его потянет.
Роман Шувалов
> Поставь LMMS (Linux MultiMedia Studio, не пугайся названию, версия под винду
> имеется), там есть синтезатор Triple Oscillator, вот такой:
Отлично, а то я уж думал самому подобную штуку делать. Похоже, что не придётся.
Роман Шувалов
> не пугайся названию, версия под винду имеется
Даже если бы название соответствовало, всё равно у меня Linux есть. Просто я на винду из-за новой студии пересел, а до этого много с линуксом сидел. Да и на виртуалке наверное можно было бы запустить.
Вышла новая версия! Добавил кучу новых инструментов и улучшил существующие. Также исправил пару багов с громкостью и синхронизацией.
Теперь звучит несравнимо лучше, чем в предыдущей версии.
Правда производительность примерно в 3 раза упала. Ну и синтезатор стал менее компактный.
Прикольно. Звучит неплохо для компактного синтезатора.
Он с начало Синтезирует звуки инструментов, или целиком звуковую дорожку?
radiantor
> Он с начало Синтезирует звуки инструментов, или целиком звуковую дорожку?
Синтезирует по ходу дела на месте. Ноты они разные и длятся по-разному, так что не думаю, что кеширование что-нибудь дало бы. Хотя можно попробовать кешировать ноту без огибающей, а потом уже её накладывать. А то на некоторых мелодиях синтезирует дольше, чем длится мелодия. Так стриминг не сделать будет.
gammaker
А, ну да, у тебя же миди. Я просто когда трекер делал простой, синтезировал сразу сэмплы и ими играл.
А из-за долгого процесса синтеза, у тебя, я подумал может ты сразу весь трек сводишь в волну в памяти, а потом уже запускаешь проигрывание этой волны средствами директсаунд.
radiantor
> я подумал может ты сразу весь трек сводишь в волну в памяти, а потом уже
> запускаешь проигрывание этой волны средствами директсаунд.
А, вот ты о чём. Именно так и есть. Я создаю полностью волну, а потом только её воспроизвожу.
radiantor
> А, ну да, у тебя же миди.
А mid-файл это просто источник информации о нотах.
Тема в архиве.