ПрограммированиеФорумЗвук

Пилю самопальный синтезатор. Возникла проблема - щелчки в музыке. (2 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#15
23:14, 25 июня 2015

На wave форме видно, что волна начинается не с 0, получается это не синусойда, а косинусойда. Щелчек этот фазовый, образуется из-за того что в цикле фаза сигнала не совпадает.

#16
1:16, 26 июня 2015

d.m.k
> attack/decay надо
Не заметил.
Тоже не знаю что это такое.

Длину затухания взял по 0,02 сек (или 20 миллисекунд).

Кажется помогло: стал ковырять код - нашёл небольшую ошибку в логике прошлого алгоритма линейного затухания. Исправил. Теперь вроде без щелчков.

[file=108408]

+ Конец звуковой волны

Vierarmig
> На wave форме видно, что волна начинается не с 0
Чем смотрел?

Vierarmig
> получается это не синусойда, а косинусойда.
А в чём разница?

Vierarmig
> Щелчек этот фазовый, образуется из-за того что в цикле фаза сигнала не
> совпадает.
Не совпадает с чём?

Народ, послушайте этот линейно сглаженный трек ([file=108408]) на предмет щелчков. Достаточно ли сглаживания? Не слишком ли "мягкое" сглаживание или надо более крутой формулой сглаживать (не линейно, а скажем через полиномы 3-й степени)?

#17
9:05, 26 июня 2015

  Трэд не читал, когда делал нечто подобное, то замечал щелчки между переходами с тона одной частоты на тон другой. Пришёл к выводу, что это происходит из-за резкого смена фаз синусоиды, то есть график колебаний в одном месте испытывает скачёк. Подкрутил так, что фаза следующего тона подхватывала последнюю фазу предыдущего. Код намного усложнился из-за появления состояния, дальше интерес к ковырянию пропал.
  Короче целчки из-за резких разрывов в амплитуде, мембрану колбасит и она щёлкает.

#18
12:36, 26 июня 2015

Zefick
>   Трэд не читал
>   Короче целчки из-за резких разрывов в амплитуде, мембрану колбасит и она щёлкает.
Зря не читал. У меня проблема точно не в обрыве синусойды.

#19
19:10, 26 июня 2015

Epsilon
> Тоже не знаю что это такое.
Эм, ну это как бы основы синтеза же
Oscillator, ADSR, modulation, filters, LFO. Простейшие вещи. Без этого получишь только пищалку, а не синтезатор.

#20
19:25, 26 июня 2015

Разрыв в производных по идее щелчки не должен создавать по крайней мере в рамках 90 градусов. Когда свой тонгенератор писал тоже столкнулся по молодости с фазовыми скачками. Решение очень простое. Использовать один массив - предвычесленную синусоиду (один полный цикл) частотой 1гц. Т.е. в случае 44100 это будет массив в 44100 значений. Частота будет просто задавать скорость движения по этому массиву. При изменении частоты меняется только скорость, а фаза всегда непрерывная. Насколько я знаю по такому принципу даже железячные OPL синты делаются.

#21
20:16, 26 июня 2015

d.m.k
> Oscillator, ADSR, modulation, filters, LFO.
А плавное затухание звуковой синусойды - это который из них?

Dexus
Насчёт кеша возможных значений синусойды - подумаю.

==========================  (опять этот запрет минусов((

Похоже тему можно считать закрытой.
Щелчков вроде нету. (Хотя я проверяю на встроенных динамиках в ноуте, и музыкальный слух у меня не сильно острый.)

#22
0:32, 27 июня 2015

Синусоиду можно генерить поворотом фазы (держим одновременно две величины - косинус и синус текущей фазы, вспоминаем школьную формулу синуса и косинуса суммы углов). Так легко можно задействовать SSE и считать одновременно четыре разных синусоиды.

> А плавное затухание звуковой синусойды - это который из них?

ADSR, когда используется для амплитудной модуляции.

#23
1:07, 27 июня 2015

Dmitry_Milk
> Синусоиду можно генерить поворотом фазы (держим одновременно две величины -
> косинус и синус текущей фазы, вспоминаем школьную формулу синуса и косинуса
> суммы углов). Так легко можно задействовать SSE и считать одновременно четыре
> разных синусоиды.
Кстати, я использую такой метод в своём синтезаторе, но вроде как оказалось, что в midi ноты имеют переменную частоту. Там есть параметр, pitch bend называется. Можно ли этот способ адаптировать для неё? Я так понимаю, что переменный шаг всё поломает и синус разойдётся?

#24
1:20, 27 июня 2015

> Можно ли этот способ адаптировать для неё? Я так понимаю, что переменный шаг всё поломает и синус разойдётся?

Чтоб синус не разошелся, надо просто контролировать модуль текущей пары синус/косинус. По-простому можно вообще просто ограничивать верхнее значение вычисляемого синуса и косинуса единицей (опять же можно и в SSE через maxps c единицами). Ну и модуль поворачивающей пары тоже должен быть всегда в районе единицы, чуть-чуть больше ее, чтоб генератор самопроизвольно не затух из-за неточностей в плавающей точке.

А вообще вопрос к писателям синтезаторов - вы знакомы с такими терминами, как VST, VSTi, VST-хост? не проще ли сваять свой VST-хост для своего игрового движка и пользоваться готовыми VSTi-плагинами (тысячи их!)? :)

#25
1:25, 27 июня 2015

gammaker
Ты про то, как http://www.gamedev.ru/code/forum/?id=202212&page=5#m63 переделать на переменную частоту?

#26
1:26, 27 июня 2015

Dmitry_Milk
> А вообще вопрос к писателям синтезаторов - вы знакомы с такими терминами, как
> VST, VSTi, VST-хост?
Я нет. У меня всё синтезируется полностью программно без готовых семплов. А как я понял по небольшому гуглингу VST и есть семплы?

#27
1:26, 27 июня 2015

Dmitry_Milk
> ADSR, когда используется для амплитудной модуляции.
Судя по https://ru.wikipedia.org/wiki/ADSR-огибающая я нечто подобное и сделал.
Спасибо за небольшое углубление моих познаний.

#28
1:28, 27 июня 2015

FordPerfect
> Ты про то, как http://www.gamedev.ru/code/forum/?id=202212&page=5#m63
> переделать на переменную частоту?
Ну да. Хотя бы без экспоненты, но лучше с ней тоже.

#29
1:28, 27 июня 2015

Dmitry_Milk
> А вообще вопрос к писателям синтезаторов - вы знакомы с такими терминами, как
> VST, VSTi, VST-хост? не проще ли сваять свой VST-хост для своего игрового
> движка и пользоваться готовыми VSTi-плагинами (тысячи их!)? :)
В первый раз слышу.

gammaker
> У меня всё синтезируется полностью программно без готовых семплов.
Такая же фигня.

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумЗвук

Тема в архиве.