Я нашел несколько библиотек, которые синтезируют инструмент с помощью API веб-аудио.
Один из них (Band.js) использует createOscillator()
в сочетании с типом осциллятора (синус, квадрат,...) см. источник.
Но это звучит слишком синтетично (пример для прослушивания) Я хочу что-то более реалистичное, но я не хочу использовать предварительно скомпилированные звуковые фонты, поэтому его нужно синтезировать. Он также должен работать на мобильном устройстве.
Итак, я нашел другую библиотеку (musical.js), которая использует первые 32 гармоники в качестве матрицы в сочетании с createPeriodicWave
см. источник, Тембр потрясающий, вы можете прослушать его
Как написано в комментарии исходного кода, гармоники берутся из этого файла образца пианино. Есть гораздо больше образцов файлов других инструментов. Я попытался заменить гармоники, даже все 2000, но это звучит всегда как пианино.
Существуют также некоторые значения для настройки и интерполяции гармоник и значений ADSR. Может быть, они только оптимизированы для звучания фортепиано?
Затем я нашел другую библиотеку (гитарный синтезатор), в которой есть действительно хороший тембр для гитары, слушать ее. Но эта библиотека не использует API createPeriodicWave
. Вместо этого он использует createScriptProcessor
и getChannelData
в сочетании с некоторыми "простыми" вычислениями, но ничего подобного гармоникам в другой библиотеке, см. Источник
Итак, мой главный вопрос
Можно ли портировать гитарный синтезатор для использования API createPeriodicWave
?
Я хочу использовать тембр гитары в musicaljs. Так что я могу переключаться между тембром фортепиано и тембром гитары.
BTW: Найдена другая библиотека, которая синтезирует звуковые инструменты. Вот демон и здесь источник. Звук тоже приятный, но в music.js-библиотеке гораздо более красивый тембр. Но похоже, что он использует нечто похожее, как getChannelData
, просто закодированное как WAVE. Он также не работает на моем мобильном устройстве с Android.