Подтвердить что ты не робот

Алгоритмически генерирует звуки музыкальных инструментов

Можно ли генерировать звуки музыкальных инструментов, используя только алгоритмы? или это можно сделать только с помощью предварительно записанных образцов звука?

4b9b3361

Ответ 1

Вавитный синтез (PDF) - наиболее реалистичный метод синтеза реального инструмента, поскольку он принимает образцы и слегка изменяет их (для пример добавления вибрато, выражение и т.д.).

Формы сигналов, генерируемые большинством музыкальных инструментов (особенно ветровых и латунных инструментов), настолько сложны, что чистый алгоритмический синтез еще недостаточно оптимизирован для работы на текущем оборудовании - даже если бы это было так, технические сложности написания такого алгоритма огромны.

Интересный сайт здесь.

Ответ 2

Это вполне возможно - это одна из вещей синтезаторов.

Это возможно, это не значит, что это просто. Синтезаторы обычно дорогие, и количество используемых алгоритмов является сложным - страница wikipedia, с которой я связан ранее, имеет ссылки на некоторые из них.

Предварительно записанные звуки проще и дешевле в использовании, но у них также есть свои ограничения - они звучат более "повторяющимися", например.

Ответ 3

Несколько лет назад в журнале Sound on Sound появилась отличная серия под названием "Synth Secrets", которая теперь может быть просмотрена в Интернете бесплатно. Они дают хорошее представление о тех методах, которые используются в аппаратных синтезаторах (как аналоговых, так и цифровых), и включают в себя некоторые статьи, в которых обсуждаются трудности репликации некоторых инструментов реального мира, таких как щипковые и поклонные струны, латунные, барабанные барабаны, акустические пианино и др.

Ответ 4

Конечно, есть много подходов. Вольфрам недавно выпустил WolframTones, который (неудивительно, если вы знаете Вольфрама) использует клеточные автоматы. Подробное описание того, как это работает, здесь.

Ответ 5

Karplus Strong Algorithm дает очень хороший синтез выщипанной струны. Он также может быть закодирован в нескольких строках C. Вы создаете круговой буфер поплавков (длина пропорциональна длине волны, т.е. 1/f), и заполняйте его полным случайным шумом между -1 и 1.

Затем вы выполняете цикл: каждый цикл, вы заменяете значение в своем текущем индексе средним значением двух предыдущих значений и испускаете это новое значение.

index = (index+1) % bufSize; 
outVal = buf[index] = decay * 0.5 * ( buf[index-1] + buf[index-2] );

Результирующий поток байтов дает вам свой звук. Конечно, это может быть сильно оптимизировано.

Чтобы сделать вашу звуковую волну влажной до 0,15 от ее первоначальной силы через одну секунду, вы можете установить распад таким образом:

#define DECAY_1S =.15
Float32 decay = pow(DECAY_1S, 1.0f / freq);

Примечание. Вам нужно изменить исходный буфер так, чтобы он содержал один полный сигнал. поэтому, если вы хотите генерировать звук с частотой 441 Гц, а частота дискретизации составляет 44,1 кГц, тогда вам нужно будет выделить 100 элементов в вашем буфере.

Вы можете думать об этом как о резонансной камере, чья основная частота составляет 441 Гц, изначально возбужденная, причем энергия рассеивается наружу от каждой точки кольца одновременно. Волшебно кажется, что он организовывается в обертоны основной частоты.

Может ли кто-нибудь опубликовать больше алгоритмов? Как насчет алгоритма непрерывного тона?

Ответ 6

После нескольких дней охоты это лучший ресурс, который я нашел: https://ccrma.stanford.edu/~jos/

Это сокровищница для синтеза звуков.

STK Например, эта страница ссылается на пример синтеза строки, а также звуковой инструментарий STK, написанный на С++ для облегчения этой работы.

Это будет держать меня в покое в течение нескольких недель, пока я его выкапываю.

Ответ 7

В дополнение к предоставленным здесь ответам существуют также структуры синтеза анализа, которые строят математические модели (часто основанные на захвате траекторий синусоидальных или шумовых компонентов) входного звука, что позволяет преобразовывать и ресинтезировать. Несколько известных структур: SMS (доступны через CLAM проект С++) и Лорис.

Физические модели инструментов также являются опцией - они моделируют физические свойства инструмента, такие как жесткость тростника, апертура дыры, щелчок по клавишам и часто создают реалистичные эффекты за счет включения нелинейных эффектов, таких как чрезмерный выдох. STK является одной из этих фреймворков на С++.

Эти фреймворки обычно более тяжелые, чем опция wavetable синтеза, но могут предоставить больше параметров для манипуляции.