Frequency intermodulation — Частотная интермодуляция

Pixilang по русски
Post Reply
iHs
Posts: 10
Joined: Sat Jan 13, 2018 11:02 pm

Frequency intermodulation — Частотная интермодуляция

Post by iHs » Fri May 11, 2018 10:52 pm

Как звучат упругие предметы сложной формы — например, колокол, гонг, лист металла, пластина ксилофона?
Звук натянутой струны состоит из основного тона (f) и ряда гармоник (2*f, 3*f, ...), в связи с этим по своей природе он довольно простой и гармоничный.
В отличие от идеальной струны, имеющей бесконечно малую толщину и точный гармонический звукоряд, металлические пластины имеют ряд колебательных мод, частоты которых не обязательно имеют рациональные соотношения. Достаточно толстая или широкая пластина — как правило, плохой музыкальный инструмент. Но правильно изготовленный колокол или настроенная деревянная пластина маримбы (с тщательной подгонкой продольных, поперечных, диагональных и т.д. мод) имеет сложный, но приятный звук.
Если ударить в колокол или пластину посильнее, то колебательный процесс становится нелинейным — различные моды начинают влиять друг на друга, неравномерно ускоряются и замедляются, нарушается регулярность колебаний, и звук становится "грязным". Примерно, как если звучащую струну начинают дёргать за один из концов с произвольной частотой.
Данная программа симулирует частотную интермодуляцию нескольких синусоид. Параметр fmindex (нижний слайдер) задаёт коэффициент интермодуляции, от 0 до 1. Каждый из голосов влияет на частоту колебаний всех остальных голосов (кроме самого себя — иначе его частота начинала бы "уплывать" с ростом коэффициента). Меняя общую громкость (верхний слайдер), можно заметить, что чем громче звук, тем сильнее интермодуляция.
По желанию администратора можно добавить в примеры кода :)
Attachments
frequency_intermodulation.pixi
исправлена ещё одна ошибка
(5.51 KiB) Downloaded 4 times
Last edited by iHs on Thu May 17, 2018 9:06 pm, edited 2 times in total.

User avatar
NightRadio
Site Admin
Posts: 2946
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Frequency intermodulation — Частотная интермодуляция

Post by NightRadio » Sun May 13, 2018 11:18 am

Спасибо! Очень интересный пример!
Не могу только понять, почему пощелкивает звук немного. Может, что-то в вычислении фазы?

iHs
Posts: 10
Joined: Sat Jan 13, 2018 11:02 pm

Re: Frequency intermodulation — Частотная интермодуляция

Post by iHs » Mon May 14, 2018 8:50 pm

Скажите, на каком устройстве при каких настройках слышны щелчки? На настройках по умолчанию и при увеличении числа каналов до 10 (Windows7, старый Intel Сeleron 2800 Mhz) и 5 каналов (Android, двухъядерный ЦП 1.2 Ghz) звук ровный. При большей нагрузке тормозит не только приложение, но и ОС.
Если я не ошибаюсь, в pixilang нет способа узнать, успевает ли функция audio_callback завершить работу.

User avatar
NightRadio
Site Admin
Posts: 2946
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Frequency intermodulation — Частотная интермодуляция

Post by NightRadio » Wed May 16, 2018 9:34 am

Причину нашел - это частота дискретизации 44010. Вероятно, тут просто опечатка, нужно было 44100.
Из за того, что глобальная частота (в настройках Pixilang - обычно 44100 или 48000) не совпадает с желаемой 44010, Pixilang постоянно делает ресэмплинг. Если в set_audio_callback() не указать никаких опций, то будет включен самый быстрый и самый некачественный алгоритм ресэмплинга - именно из за него в звуке присутствуют еле заметные щелчки (типа хруста грампластинки), которые хорошо слышно в наушниках. Чтобы их не было - нужно включать интерполяцию флагом AUDIO_FLAG_INTERP2. В конкретном примере будет: set_audio_callback(audio_callback, 0, samplerate, INT16, 1, AUDIO_FLAG_INTERP2).

iHs
Posts: 10
Joined: Sat Jan 13, 2018 11:02 pm

Re: Frequency intermodulation — Частотная интермодуляция

Post by iHs » Wed May 16, 2018 7:23 pm

Спасибо за замечание, исправил, но щелчков я всё равно не слышу :pardon:

Post Reply