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

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

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

Да, я пилю себе программу - синтезатор музыки.

И вдруг заметил, что в полученном треке есть небольшие щелчки.
Вот кусок того самого трека: Трек - здесь щелчки слышно сильнее всего.

И так, господа эксперты, что это может быть? Почему там слышны щелчки?

upd: надо было сделать погромче, слишком тихо получилось. Завтра (уже сегодня) исправлю.

Всем спокойной/продуктивной ночи))

Upd: немного улучшенная версия трека ft2 (увеличил громкость в 5 раз - теперь не надо выкручивать громкость + убран 1 "неправильный" импульс).

#1
2:20, 25 июня 2015

Epsilon
> Да, я пилю себе программу - синтезатор музыки.
Я тоже пилю: http://www.gamedev.ru/projects/forum/?id=189866

Epsilon
> И так, господа эксперты, что это может быть? Почему там слышны щелчки?
Наверное резко обрываешь ноту и происходит скачок в ноль. Надо или дать ей подольше затухать, либо искусственно плавно её заглушать. Любые резкие скачки будут звучать как щелчки.

#2
12:40, 25 июня 2015

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

+ скрин конца импульса

gammaker
> Надо или дать ей подольше затухать, либо искусственно плавно её заглушать.
> Любые резкие скачки будут звучать как щелчки.
Подольше это сколько времени или периодов колебаний?
Плавно глушить пробовал - почти не даёт эффекта.

P.S.: gammaker, ты хоть слушал тот файл, что я приложил? Или смотрел его график амплитуд? Я ж его не зря прикладывал ;)

#3
12:49, 25 июня 2015

gammaker
> Я тоже пилю: http://www.gamedev.ru/projects/forum/?id=189866
Глянул тему
"Библиотеки: вывод звука через DirectSound" - не подходит - у меня синтезируется wav-файл, у тебя выводится звук через стороние библиотеки.

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

#4
12:58, 25 июня 2015

Epsilon
> Не пронял, что именно ты имел ввиду, но скорее всего такого у меня нет.
Да, у тебя нет скачков. Тогда не знаю, вроде нечему щёлкать. Я лично щелчков не слышал, но я ночью слушал с низкой громкостью, чтобы никого не разбудить. Буду дома, ещё послушаю.
Но реальные музыкальные инструменты экспоненциально затухают, поэтому щелчков не будет, если их не обрывать раньше времени. У тебя же вообще вроде нет затухания.

Epsilon
> "Библиотеки: вывод звука через DirectSound" - не подходит - у меня
> синтезируется wav-файл, у тебя выводится звук через стороние библиотеки.
Какая разница, переделать могу за 5 минут. А вообще я просто кинул ссылку показать, что тоже подобное делал и вот что получилось.

#5
13:49, 25 июня 2015

Epsilon
> Не пронял, что именно ты имел ввиду, но скорее всего такого у меня нет.
У тебя щелчок не 0 порядка (разрыв), а 1 порядка (излом, разрыв производной).
Высокие частоты спадают не как 1/ω, а как 1/ω².
Это, конечно, получше, но все равно может быть заметно.
Умножай на более гладкую функцию.

#6
13:51, 25 июня 2015

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

Epsilon
> Глянул тему
Запустил хоть программу?

#7
14:35, 25 июня 2015

gammaker
> Но реальные музыкальные инструменты экспоненциально затухают
Запомню.
А можно узнать параметры затухания? Типа за сколько до конца начинается затухание, каково основание логарифма затухания и прочее...
Странно, я вроде экспоненциальное затухание тоже пробовал.. не могу найти код. Ладно, это вроде не сложно сделать.

gammaker
> У тебя же вообще вроде нет затухания.
Да, в первый раз решил не добавлять.

gammaker
> Какая разница, переделать могу за 5 минут. А вообще я просто кинул ссылку
> показать, что тоже подобное делал и вот что получилось.
Ясно.

}:+()___ [Smile]
> Умножай на более гладкую функцию.
Экспоненту? А какие ещё есть варианты?

gammaker
> Запустил хоть программу?
1:1 :))
Открыл: "Файл не открыт!"... это консоль?? Суровый минимализм))

#8
14:55, 25 июня 2015

Epsilon
> Открыл: "Файл не открыт!"... это консоль?? Суровый минимализм))
Да всё руки не доходят GUI приделать. Надо мышью на exe'шник перенести midi файл. Кучка midi файлов лежит в архивах с более старыми версиями.

Epsilon
> Экспоненту? А какие ещё есть варианты?
Какой-нибудь полином 2-й или выше степени. Или просто делить на время, хотя это будет гипербола, которая за конечное время не занулится. Впрочем, как и с экспонентой.

Epsilon
> Запомню.
> А можно узнать параметры затухания? Типа за сколько до конца начинается
> затухание, каково основание логарифма затухания и прочее...
Ну вообще-то не все, а наверное чуть больше половины. Там всякие пианино, гитара.
А у некоторых дудочек например громкость постепенно нарастает, потом держится на максимуме, а потом затухает. Это можно задать как угодно. Любую функцию придумать, которая переходит в ноль в конце. Можно даже в виде таблицы задать, интерполируя промежуточные значения.
Параметры я подбирал экспериментально, что-то типа exp(-a*t), где t - время в секундах, a - число у меня варьируется от 5 до 8.

#9
15:06, 25 июня 2015

Epsilon
> Экспоненту? А какие ещё есть варианты?
B-сплайн нужного порядка, который выходит на нули в конце.
Для начала умножь на 1+2x³−3x², x=0..1, причем начало (x=0) и конец (x=1) совмести с нулями синуса, тогда будет разрыв 3 порядка.
Или можешь даже сделать линейное затухание, но растяни его по времени подольше.

#10
17:47, 25 июня 2015

attack/decay надо

#11
17:55, 25 июня 2015

gammaker
> Надо мышью на exe'шник перенести midi файл. Кучка midi файлов лежит в архивах с
> более старыми версиями.
У меня так же работает. Только переносить надо не миди, а текстовый файл спец.формата.

gammaker
> Параметры я подбирал экспериментально, что-то типа exp(-a*t), где t - время в
> секундах, a - число у меня варьируется от 5 до 8.
Ясно. Хотя не думал, что время может быть больше 100 миллисекунд - наверное в этом моя ошибка.

}:+()___ [Smile]
> B-сплайн нужного порядка
В первые слышу, это есть что такое?

}:+()___ [Smile]
> Или можешь даже сделать линейное затухание, но растяни его по времени подольше.
Это точно не помогает. Либо нет толка, либо очень слышно затухание... как тогда делать импульсы короче секунды?

}:+()___ [Smile]
> 1+2x²−3x²
Кажется чтото не то со степенями.

#12
18:29, 25 июня 2015

Epsilon
> Ясно. Хотя не думал, что время может быть больше 100 миллисекунд - наверное в
> этом моя ошибка.
Они и пару секунд запросто могут быть. У экспоненциально затухающих нот надо вообще брать один и тот же коэффициент затухания, а следовательно, и фиксированную длину. А ноты инструментов, где есть атака и спад, можно тянуть сколько угодно.
Начало заметнее всего, а дальше идёт спад. Смысл в том, что музыка - это не просто набор отдельных нот, они ещё накладываются друг на друга. Я в этом убедился на своём опыте, когда делал свой синтезатор.

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

#13
19:24, 25 июня 2015

Epsilon
> В первые слышу, это есть что такое?
https://en.wikipedia.org/wiki/B-spline
Удобно, что можно явно задавать профиль огибающей двигая контрольные точки.

> Кажется чтото не то со степенями.
Сорри, там одна тройка: 1+2x³−3x²

#14
20:54, 25 июня 2015

}:+()___ [Smile]
> Epsilon
> > В первые слышу, это есть что такое?
> https://en.wikipedia.org/wiki/B-spline
> Удобно, что можно явно задавать профиль огибающей двигая контрольные точки.
Ничё не понял.

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

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