gammaker
> Там наоборот деградация.
Метод проб и ошибок, ну и просто где-то это оказалось не актуально, но зато есть и хорошие, и постоянно улучшающиеся синтезаторы.
Я выложил исходники синтезатора и своей либы, на которой он основан, на github!
Скомпилированный бинарник здесь. midi можете взять из архивов со старыми версиями в #0 или например на сайте https://freemidi.org/. Одна из midi лежит в репозитории. Библиотеку для линковки со старой msvcrt.lib я в репозиторий не положил, поэтому эта собранная версия не такая компактная.
Самое главное нововведение - наконец-то появились долгожданные ударники! Ну и в целом громкость инструментов подкалибровал и стало получше. Но из-за ударников нагрузка на процессор стала неравномерная и стриминг стал глючить. Поэтому по умолчанию он отключён, пока я не переделаю стриминг.
Мой предыдущий пост так никто не прокомментировал. Ну тогда вот вам онлайн-демки, чтобы не качать:
Прошу прощения, я не разбираюсь глубоко в технических вопросах и не очень хорошо понял описание. Ваша программа - движок для воспроизведения MIDI-файлов через волновой вывод без использования аппаратных MIDI-возможностей звуковой карты?
Георгий А. С.
> Ваша программа - движок для воспроизведения MIDI-файлов через волновой вывод
> без использования аппаратных MIDI-возможностей звуковой карты?
Да. Но насколько я понимаю, встроенный синтезатор винды тоже уже давно не использует аппаратных возможностей звуковой карты.
gammaker
В Аббе через браузер слышу какой-то рассинхрон
Бинарная версия падает
Core i3 4010U Win 8.1
gammaker
Не работает на XP, на семёрке проверю позже.
Madware
> В Аббе через браузер слышу какой-то рассинхрон
Согласен, может миди-файл кривой? Я скачал в п.0 две старые версии, но там нет Mamma Mia.
Madware
> В Аббе через браузер слышу какой-то рассинхрон
Странно, я вроде не замечал.
Mikle
> Не работает на XP, на семёрке проверю позже.
Опять совместимость слетела что ли? Надо будет опять в виртуалке потестить.
Mikle
> Согласен, может миди-файл кривой? Я скачал в п.0 две старые версии, но там нет
> Mamma Mia.
Она недавно появилась, вот midi файл: http://gammaker.github.io/midi/ABBA-Mamma_Mia.mid
gammaker
в начале не так заметно, но с некоторым времене становится отчетливо слышно
Madware
> в начале не так заметно, но с некоторым времене становится отчетливо слышно
Я наверное раз 20 слушал и оригинал тоже, не замечал никакого рассинхрона. Вроде с оригиналом всё сходится.
Новая версия! Самый крупный релиз за всю историю моего синтезатора!
Сжатая до 53 КБ виндовая версия: http://www.gamedev.ru/files/?id=127305. Использует UPX, поэтому некоторые антивирусы могут ругаться. Также крашится на некоторых версиях винды при закрытии окна на крестик. Несжатые версии теперь не крашатся.
Можно слушать прямо в браузере. Если комп слабый и не тянет в реальном времени, снять галочку и подождать, пока синтезируется целиком.
Здесь внизу список ссылок на прослушивание разных MIDI'шек.
Новую и предыдущую версию можно сравнить прямо в браузере:
Что нового:
1) Был полностью переписан парсер формата MIDI. Отсюда:
- Поддержка обоих форматов MIDI 0 и 1 - больше не нужно конвертировать 0 в 1, как в прошлых версиях.
- Поддержка изгиба ноты - события Pitch Bend.
- Потенциально синтезатор стал ближе к тому, чтобы получать MIDI-события в реальном времени и воспроизводить их. Он больше не переводит музыку целиком в собственный формат.
- Поддержка панорамы - теперь синтезатор стал выдавать стерео музыку!
2) Теперь NoteOff обрабатывается корректно и длительность нот стала правильной.
3) Открывал новый для себя метод синтеза крутых звуков через обратное преобразование Фурье. Большую часть инструментов переделал этим методом и теперь звучание улучшилось на порядки: голос, хор, Synth Strings, Synth Brass, флейта и куча других инструментов были переделаны.
4) Более равномерная нагрузка на процессор при стриминге - ноты теперь генерируются частями, а не целиком, как раньше.
5) Исправлены щелчки.
6) Хорошо оптимизировал. При всех этих улучшениях производительность в среднем не просела. Где-то стало медленнее, где-то быстрее, но в среднем осталось так же.
gammaker
> 2) Теперь NoteOff обрабатывается корректно и длительность нот стала правильной.
а тут нельзя угадать, ты допустим можешь обработать по стандарту, а какой-то редактор сохранить через жопу (и таких редакторов хватает).
У себя я сделал такой костыль:
Aroch
> У себя я сделал такой костыль:
Не понял, в чём суть костыля? Что ещё за лучшие ноты мы находим?
Aroch
> а тут нельзя угадать, ты допустим можешь обработать по стандарту, а какой-то
> редактор сохранить через жопу (и таких редакторов хватает).
Вроде те MIDI, которые у меня есть, звучат хорошо и стало ближе к тому, как они звучат в винде.
gammaker
> Не понял, в чём суть костыля? Что ещё за лучшие ноты мы находим?
по стандарту событие note off должно относится к последней открытой ноте, но некоторые редакторы могут сохранять миди файлы так что note off будет относится не к последней открытой ноте, а какой-нибудь ранее открытой. К примеру иногда вижу такое:
track time: 0
note on
track time: 10
note on
note off
track time: 20
note off
Если обрабатывать по стандарту, то получится одна нота с длиной 20, другая в середине с длиной 0. Костыль обнаруживает такие случаи и смотрит в списке открытых нот след. более подходящую (чтобы длина хотя бы не была меньше или равной 0)
з.ы. естественно это все для одного и того же трека, канала и для нот с одним и тем же midi code.
Aroch
> Если обрабатывать по стандарту, то получится одна нота с длиной 20, другая в
> середине с длиной 0.
А разве вообще могут одинаковые ноты звучать одновременно на одном канале? У меня если встречается NoteOn уже играющей ноты, то играющая нота отпускается и начинается новая. Если там дальше будет лишний NoteOff, то он игнорируется.
В том случае, который ты привёл, у меня бы нота посередине пропала, а первая нота имела бы длину 10. Я больше сотни MIDI переслушал, вроде не замечал пропавших нот.
Тема в архиве.