Да, я пилю себе программу - синтезатор музыки.
И вдруг заметил, что в полученном треке есть небольшие щелчки.
Вот кусок того самого трека: Трек - здесь щелчки слышно сильнее всего.
И так, господа эксперты, что это может быть? Почему там слышны щелчки?
upd: надо было сделать погромче, слишком тихо получилось. Завтра (уже сегодня) исправлю.
Всем спокойной/продуктивной ночи))
Upd: немного улучшенная версия трека ft2 (увеличил громкость в 5 раз - теперь не надо выкручивать громкость + убран 1 "неправильный" импульс).
Epsilon
> Да, я пилю себе программу - синтезатор музыки.
Я тоже пилю: http://www.gamedev.ru/projects/forum/?id=189866
Epsilon
> И так, господа эксперты, что это может быть? Почему там слышны щелчки?
Наверное резко обрываешь ноту и происходит скачок в ноль. Надо или дать ей подольше затухать, либо искусственно плавно её заглушать. Любые резкие скачки будут звучать как щелчки.
gammaker
> Наверное резко обрываешь ноту и происходит скачок в ноль.
Не пронял, что именно ты имел ввиду, но скорее всего такого у меня нет.
gammaker
> Надо или дать ей подольше затухать, либо искусственно плавно её заглушать.
> Любые резкие скачки будут звучать как щелчки.
Подольше это сколько времени или периодов колебаний?
Плавно глушить пробовал - почти не даёт эффекта.
P.S.: gammaker, ты хоть слушал тот файл, что я приложил? Или смотрел его график амплитуд? Я ж его не зря прикладывал ;)
gammaker
> Я тоже пилю: http://www.gamedev.ru/projects/forum/?id=189866
Глянул тему
"Библиотеки: вывод звука через DirectSound" - не подходит - у меня синтезируется wav-файл, у тебя выводится звук через стороние библиотеки.
gammaker
Не подскажешь, где можно взять аудио-файл с правильно записанным чистым звуком? Ну т.е. чтобы там была синусойда чистого звука в N-герц с правильным окончанием, который я бы смог проанализировать и понять как надо заканчивать звуковые колебания.
Epsilon
> Не пронял, что именно ты имел ввиду, но скорее всего такого у меня нет.
Да, у тебя нет скачков. Тогда не знаю, вроде нечему щёлкать. Я лично щелчков не слышал, но я ночью слушал с низкой громкостью, чтобы никого не разбудить. Буду дома, ещё послушаю.
Но реальные музыкальные инструменты экспоненциально затухают, поэтому щелчков не будет, если их не обрывать раньше времени. У тебя же вообще вроде нет затухания.
Epsilon
> "Библиотеки: вывод звука через DirectSound" - не подходит - у меня
> синтезируется wav-файл, у тебя выводится звук через стороние библиотеки.
Какая разница, переделать могу за 5 минут. А вообще я просто кинул ссылку показать, что тоже подобное делал и вот что получилось.
Epsilon
> Не пронял, что именно ты имел ввиду, но скорее всего такого у меня нет.
У тебя щелчок не 0 порядка (разрыв), а 1 порядка (излом, разрыв производной).
Высокие частоты спадают не как 1/ω, а как 1/ω².
Это, конечно, получше, но все равно может быть заметно.
Умножай на более гладкую функцию.
Да, заметил небольшие щелчки. Попробовал сгенерировать в Audacity волну, услышал там такой же щелчок. График там правильный, волна заканчивается в нуле. Значит это не баг, а не фича. Но в реальных звуках синусоида будет плавно затухать, поэтому щелчков не будет. Так что делай уже огибающие, без них всё равно неинтересно звучит.
Epsilon
> Глянул тему
Запустил хоть программу?
gammaker
> Но реальные музыкальные инструменты экспоненциально затухают
Запомню.
А можно узнать параметры затухания? Типа за сколько до конца начинается затухание, каково основание логарифма затухания и прочее...
Странно, я вроде экспоненциальное затухание тоже пробовал.. не могу найти код. Ладно, это вроде не сложно сделать.
gammaker
> У тебя же вообще вроде нет затухания.
Да, в первый раз решил не добавлять.
gammaker
> Какая разница, переделать могу за 5 минут. А вообще я просто кинул ссылку
> показать, что тоже подобное делал и вот что получилось.
Ясно.
}:+()___ [Smile]
> Умножай на более гладкую функцию.
Экспоненту? А какие ещё есть варианты?
gammaker
> Запустил хоть программу?
1:1 :))
Открыл: "Файл не открыт!"... это консоль?? Суровый минимализм))
Epsilon
> Открыл: "Файл не открыт!"... это консоль?? Суровый минимализм))
Да всё руки не доходят GUI приделать. Надо мышью на exe'шник перенести midi файл. Кучка midi файлов лежит в архивах с более старыми версиями.
Epsilon
> Экспоненту? А какие ещё есть варианты?
Какой-нибудь полином 2-й или выше степени. Или просто делить на время, хотя это будет гипербола, которая за конечное время не занулится. Впрочем, как и с экспонентой.
Epsilon
> Запомню.
> А можно узнать параметры затухания? Типа за сколько до конца начинается
> затухание, каково основание логарифма затухания и прочее...
Ну вообще-то не все, а наверное чуть больше половины. Там всякие пианино, гитара.
А у некоторых дудочек например громкость постепенно нарастает, потом держится на максимуме, а потом затухает. Это можно задать как угодно. Любую функцию придумать, которая переходит в ноль в конце. Можно даже в виде таблицы задать, интерполируя промежуточные значения.
Параметры я подбирал экспериментально, что-то типа exp(-a*t), где t - время в секундах, a - число у меня варьируется от 5 до 8.
Epsilon
> Экспоненту? А какие ещё есть варианты?
B-сплайн нужного порядка, который выходит на нули в конце.
Для начала умножь на 1+2x³−3x², x=0..1, причем начало (x=0) и конец (x=1) совмести с нулями синуса, тогда будет разрыв 3 порядка.
Или можешь даже сделать линейное затухание, но растяни его по времени подольше.
attack/decay надо
gammaker
> Надо мышью на exe'шник перенести midi файл. Кучка midi файлов лежит в архивах с
> более старыми версиями.
У меня так же работает. Только переносить надо не миди, а текстовый файл спец.формата.
gammaker
> Параметры я подбирал экспериментально, что-то типа exp(-a*t), где t - время в
> секундах, a - число у меня варьируется от 5 до 8.
Ясно. Хотя не думал, что время может быть больше 100 миллисекунд - наверное в этом моя ошибка.
}:+()___ [Smile]
> B-сплайн нужного порядка
В первые слышу, это есть что такое?
}:+()___ [Smile]
> Или можешь даже сделать линейное затухание, но растяни его по времени подольше.
Это точно не помогает. Либо нет толка, либо очень слышно затухание... как тогда делать импульсы короче секунды?
}:+()___ [Smile]
> 1+2x²−3x²
Кажется чтото не то со степенями.
Epsilon
> Ясно. Хотя не думал, что время может быть больше 100 миллисекунд - наверное в
> этом моя ошибка.
Они и пару секунд запросто могут быть. У экспоненциально затухающих нот надо вообще брать один и тот же коэффициент затухания, а следовательно, и фиксированную длину. А ноты инструментов, где есть атака и спад, можно тянуть сколько угодно.
Начало заметнее всего, а дальше идёт спад. Смысл в том, что музыка - это не просто набор отдельных нот, они ещё накладываются друг на друга. Я в этом убедился на своём опыте, когда делал свой синтезатор.
Epsilon
> Это точно не помогает. Либо нет толка, либо очень слышно затухание... как тогда
> делать импульсы короче секунды?
Бери любую степень, не обязательно же первую брать.
Epsilon
> В первые слышу, это есть что такое?
https://en.wikipedia.org/wiki/B-spline
Удобно, что можно явно задавать профиль огибающей двигая контрольные точки.
> Кажется чтото не то со степенями.
Сорри, там одна тройка: 1+2x³−3x²
}:+()___ [Smile]
> Epsilon
> > В первые слышу, это есть что такое?
> https://en.wikipedia.org/wiki/B-spline
> Удобно, что можно явно задавать профиль огибающей двигая контрольные точки.
Ничё не понял.
Тема в архиве.