Генерация музыкальных инструментов звучит алгоритмически - PullRequest
21 голосов
/ 16 мая 2010

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

Ответы [ 9 ]

9 голосов
/ 16 мая 2010

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

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

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

7 голосов
/ 16 мая 2010

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

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

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

5 голосов
/ 29 октября 2010

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

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

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

Это заставит меня замолчать на несколько недель, пока я копаюсь в этом.

5 голосов
/ 17 мая 2010

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

4 голосов
/ 29 октября 2010

Алгоритм Karplus Strong дает очень хороший синтез сорванной струны. Он также может быть закодирован в несколько строк 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 Гц, изначально под напряжением, с энергией, рассеивающейся наружу из каждой точки в кольце одновременно. Волшебно, кажется, он организуется в обертоны основной частоты.

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

4 голосов
/ 16 мая 2010

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

2 голосов
/ 18 мая 2010

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

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

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

0 голосов
/ 30 декабря 2018

У меня был большой успех и удовольствие от синтеза FM. Это вычислительно легкий метод, являющийся источником огромного количества поп-синтезаторных звуков 1980-х годов (являющихся основой вездесущего Yamaha DX-7).

Я использую его для генерации звука на лету, а не для записи. Простой пример звука струнного синтезатора, генерируемого на лету, можно получить (скачать бесплатно, Win64) с http://philfrei.itch.io/referencenotekeyboard. Синтез органа в той же программе - это простой аддитивный алгоритм синтеза.

Мне бы пришлось поискать несколько хороших уроков по этому вопросу. Я знаю, что мы обсуждали это кучу на java-gaming.org, когда я пытался это выяснить, а затем, когда помогал nsigma разобраться в изгибе его FM-алгоритма. Главное - использовать фазовую, а не частотную модуляцию, если вы хотите связать более чем один модулятор с несущей.

Что напоминает мне! Этот удивительный звуковой генератор на основе Java, который можно проверить, позволяет создавать различные формы синтеза с контролем в реальном времени: PraxisLIVE

0 голосов
/ 30 октября 2010

Chuck

Этот PDF подробно описывает, как SMule создал Ocarina для iPhone (уверен, что все видели рекламу) они сделали это, портировав Чака - строго синхронизированного, одновременного и на лету Язык программирования аудио

Это доступно для MacOS X, Windows и Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...