Ответ 1
Это не ответ, просто некоторые мысли и заметки по этой теме.
Сам вопрос интересен для меня, я играю на гитаре, но у меня никогда не было шанса (до сих пор) касаться музыки в коде. Я читал немного теории и играл с music.js, и я чувствую, что я еще далек от решения.
Вот некоторые заметки, надеюсь, что они могут быть полезны:
1) Я собрал приведенный пример кода, извлеченного из musicial.js, см. web-audio-test.js
и web-audio.html
.
Настройка аудиоузлов для musicial.js, если я не ошибаюсь, заключается в следующем:
есть "хвостовая" часть, которая является общей для всех узлов и постоянно остается и "голова" - набор узлов, созданных для воспроизведения каждой ноты
| ------ HEAD (for each note)------ | --- TAIL (for all notes)----------- |
| | |
[ |Oscillator|->|Biquad|->|Gain|-> ] [|Gain|->|Dynamics |->|Destination| ]
| Periodic | |Filter| |ADSR| |Compressor|
| Wave |
Примечание: первый осциллятор может быть удвоен другим, чтобы воспроизвести частоту заметок + отстроить тембр.
Итак, мы создаем генератор (или два) + фильтр + коэффициент усиления ADSR для воспроизведения каждой ноты. Таким образом мы создаем множество аудио узлов. Musicial.js обрабатывает это, создавая очередь заметок и передавая только ограниченный набор заметок в API веб-аудио.
Настройка гитарного синтезатора выглядит намного проще, и это всего лишь |Script Processor| -> | Output |
.
Образец гитарного звука генерируется из кода и подается в ScriptProcessor node, который действует как источник звука (например, если вы загрузили образец из файла).
Не уверен, но, возможно, music.js также может использовать этот подход для упрощения кода.
2) Я играл с разными параметрами в musicial.js, но все же все звучит как пианино.
Когда я применяю басовые или гитарные коэффициенты из примеров волновых таблиц, это звучит по-другому, но все равно как пианино (особенно высокие ноты).
Настройки ADSR не меняют этот звук "фортепиано", но я думаю, что они не могут фактически превратить звук одного инструмента в звук другого.
Массивы mult
и freq
, которые используются для интерполяции гармоник в реальном/воображении на более высокую частоту, вероятно, более важны, но если мы держим их пустыми (без интерполяции), инструмент по-прежнему звучит как пианино.
То, что на самом деле нужно изменить для настройки звука, по-прежнему остается загадкой для меня.
Я видел вопрос, который вы опубликовали на github, надеюсь, что автор musicial.js сможет хотя бы дать некоторые подсказки.
3) Полезные ссылки/инструменты
Образцы аудио Google не содержат ничего подобного. Наиболее близким является wavetable synth example, где вы можете переключаться между различными волновыми таблицами.
В Firefox есть "Web Audio Editor" , где вы можете увидеть график аудиоустройств, очень удобный для изучения настройки звука.
4) Практическое решение.
Вы, наверное, уже об этом, на данный момент я бы использовал как musicial.js, так и гитарный синтезатор.
Простая обертка может унифицировать интерфейсы и предоставлять инструменты для фортепиано и гитары.