gammaker
> Всё равно на 48 кГц не заметно.
Очень даже заметно!
d.m.k
> Самый простой (и наименее ударяющий по производительности) WT синтез, но у него
> свои проблемы и ограничения.
Так он же записанные семплы использует. Это то, от чего я изначально хотел уйти, делая свой синтезатор. Какое отношение это вообще имеет к пилообразному сигналу?
d.m.k
> Ну а дальше BLIT
Бегло просмотрел. Вообще не понял, при чём здесь все эти синусы и косинусы. Надо посчитать дофига этих синусов и косинусов, чтобы сгенерировать семпл? Это же будет в сотни раз медленнее точной реализации пилы в лоб. Или идея в чём-то другом? В любом случае, считать сумму накладно выйдет, даже без синусов.
Да и вообще там только частные случаи моей пилы. У меня отношение нарастание:спад можно регулировать.
d.m.k
> Очень даже заметно!
Не знаю, мне незаметно. Ну будет в худшем случае каждый десятый семпл высших гармоник смещён немного не туда, но кто ж это заметит?
Готова версия под Android! Ссылки в нулевом посте. Это только apk, MIDI файлы качать отдельно. Например взять из архива Windows версии.
Новая версия!
[file=105701]
По сравнению с предыдущими версиями значительный прогресс. Появилась куча новых инструментов, старые стали звучать лучше. Улучшен баланс громкости инструментов, но пока не идеал.
В архиве лежат версии для Windows и для Android. Некоторые MIDI файлы прилагаются.
Что не реализовано:
1) Чтение MIDI файлов формата 0 - они обычно играются только одним ударным инструментом. Корректно читаются только файлы формата 1.
2) Ударные инструменты. Вместо них стоит заглушка из одного и того же звука.
3) Всякие инструменты, использующие шум - Seashore, Gunshot и подобные.
4) Некоторых музыкальных инструментов не хватает, но все основные присутствуют. Ещё не совсем достигнут баланс громкости. Одни инструменты могут заглушать другие.
Что-то ни одна версия не запускается под XP. Последняя говорит
Can't create process, ErrCode=0x000000C1, Description:
%1 не является приложением Win32.
а предыдущие просто ничего не делают.
Dexus
> Что-то ни одна версия не запускается под XP. Последняя говорит
> Can't create process, ErrCode=0x000000C1, Description:
> %1 не является приложением Win32.
Есть подозрения, что это из-за CRT. Чтобы уменьшить exe'шник и не тащить зависимостей от рантайма, я линкуюсь с msvcrt, которая встроена в любую винду. Но она видимо разных версий в разных виндах. На XP были подобные ошибки, когда я использовал функции, которых нет в старой CRT, но есть в новых, но я их исправлял. Но я уже давно ничего не проверял на XP, так что может опять не ту функцию использую.
Сейчас поставлю XP на виртуалку и проверю.
Исправил: http://www.gamedev.ru/files/?id=106009.
CRT оказалась ни при чём, просто надо было в настройках проекта поставить минимальную версию винды. А по умолчанию Visual Studio 2013 видимо создаёт бинарники, не поддерживающие XP.
gammaker
На XP запускается, но глючит. Проверил на трёх разных миди файлах, тормозит примерно через каждую секунду, хотя нагрузка на CP минимальна - 1-2%.
При закрытии программы нажатием соответствующей кнопки выдаёт ошибку обращения к памяти, которая "не может быть Read".
Mikle
> На XP запускается, но глючит. Проверил на трёх разных миди файлах, тормозит
> примерно через каждую секунду, хотя нагрузка на CP минимальна - 1-2%.
У меня тоже. Я думал это из-за виртуалки. Ты в реальной винде XP тестируешь?
Mikle
> При закрытии программы нажатием соответствующей кнопки выдаёт ошибку обращения
> к памяти, которая "не может быть Read".
Видимо винда криво прибивает процесс. В семёрке тоже падает. Отладчик говорил по-моему, что ошибка происходит в деструкторе глобальной переменной, которая освобождает интерфейс DirectSound. Видимо винда сначала прибивает DirectSound, пока программа ещё не успела завершиться. А в восьмёрке уже не падает.
Так что закрывать лучше на Enter, чтобы main завершался корректно сам.
у меня на Win 7 тоже при закрытии падает.
foxes
> у меня на Win 7 тоже при закрытии падает.
У всех на 7 падает. Так и должно быть, это баг винды, судя по всему. На восьмёрке уже исправили.
gammaker
> Ты в реальной винде XP тестируешь?
Да, раельная XP SP3, проц мощный, памяти много.
gammaker
Запускается. Щёлкает.
Windows XP.
start /HIGH MusicSynthesizer.exe частично помогает.
SetPriorityClass() и SetThreadPriority() пробовал?
Загрузка процессора ~5%.
С громкостью что-то странное, да.
И окончание ноты как-то быстро наступает, если не ошибаюсь.
Судя по всему у XP глюки со стримингом. У меня буфер делится пополам. Пока одна половина воспроизводится, вторая блокируется и в неё идёт запись. Видимо на XP одна из половин куда-то пропадает или вообще не воспроизводится.
Mikle
> Да, раельная XP SP3, проц мощный, памяти много.
Ну памяти много не надо. Синтезатор потребляет меньше 4 МБ.
Собрал версию без стриминга. Она синтезирует всю музыку целиком. Некоторые синтезируются за пару секунд, а некоторые могут синтезироваться минуту. Зато гарантировано воспроизводятся даже на слабом процессоре. У меня на XP в виртуалке работает без задержек.
MidiSynth (только exe без стриминга)
gammaker
Да, работает ровно.
Загрузка midi файла Beethoven_Fur_Elise1.mid...
Длительность музыки: 170.25 с.
Синтез...
Время синтеза: 73312.36 мс.
Воспроизведение...
Своеобразное звучание Für Elise...
Инструменты:
0 Acoustic Grand Piano
46 Orchestral Harp
Походу Orchestral Harp генерируется... странно.
Сама MIDI'шка в http://solmire.com/ звучит вполне внятно. На мой слух, я же не спец.
Тема в архиве.