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

Как создать гитарную ноту

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

Я могу делать чистые грешные волны весь день, но я пытаюсь вспомнить, как делать звук, похожий на гитару. Я помню, что у него было что-то с использованием random() и константы falloff, добавленной к sin-волне, но я не могу запомнить детали.

4b9b3361

Ответ 2

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

  • Субтрактивный синтез
  • Аддитивный синтез
  • Гранулированный синтез
  • Вавитный синтез
  • Синтез частотной модуляции
  • Фазовый синтез искажений
  • Синтез физического моделирования
  • Типовой синтез
  • Субгармонический синтез

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

Вероятно, вам следует начать с аддитивного синтеза. Для этого просто добавьте синусоидальные волны основной частоты и целое число. Например, 440 Гц, 880 Гц, 1320 Гц,... Амплитуда должна экспоненциально снижаться с частотой. Информация о структуре компонентов лучше всего найти в научных статьях, посвященных анализу музыкальных инструментов. Наконец, вы должны модулировать амплитуду сигнала с помощью огибающей во времени. Структура для гитары также можно найти в упомянутых работах.


Ссылки из cdonner (Выщипывание гитарной струны - алгоритм Karplus-Strong) и Dervin Thunk (Физическое моделирование). Действительно простая аппроксимация полного физического моделирования с дифференциальными уравнениями. Возможно, это довольно ограничено гитарными струнами и аналогичными инструментами, но именно то, что вы ищете и, безусловно, проще сделать, чем настройку аддитивной модели. Я попробую это сам, если найду какое-то время в выходные дни; действительно вышел из того, что можно выйти из алгоритма.

Ответ 3

Синтез гитары - особенно сложная проблема из-за почти бесконечного количества способов аппликации грифа и возбуждения строки.

По существу, строка будет колебаться на своей базовой частоте плюс ряд гармоник с гораздо меньшей энергией. Я бы порекомендовал посмотреть на график Фурье из одного нерезкого набора струн.

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

Ответ 4

В качестве отправной точки вы можете захотеть взглянуть на некоторые формы гитарных звуков. Я проверил эту публикацию Боба Штурма на MathWorks File Exchange. Похоже, он содержит кучу демонстраций для обработки сигналов, и есть некоторые .wav файлы для многих инструментов, включая гитару. Вы можете загрузить их в MATLAB с помощью WAVREAD, а затем начать выяснять, как вы можете реплицировать форму волны (то есть какой вид распада с течением времени вы будете использовать и т.д.).

Ответ 5

Учитывая, что это был первый год (я должен был искать "первокурсник" ), я предполагал, что они искали простой фильтр с скрученной строкой, а не точное физическое моделирование гитары (хотя возможно, вы получите дополнительный кредит). Это общее назначение при изучении обработки цифрового сигнала.

Фильтр состоит из цикла задержки, который подается через фильтр нижних частот и смешивается с входом. Чтобы воспроизвести заметку, вы посылаете короткий сигнал широкого спектра на вход (например: взрыв белого шума). Это перемещается вокруг петли задержки, каждый раз теряя часть своих высокочастотных компонентов. Длина петли задержки определяет резонансную частоту струны.

Ответ 6

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

Ребята из CCRMA в Стэнфорде создали набор классов С++ для синтеза звука и аудио ввода/вывода, а там plucked и twang классы, которые эмулируют выщипываемые строки.

Ответ 7

В Windows используйте Win32 MM apis (5 строк кода)