Page 1 of 1

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

Posted: Fri May 11, 2018 10:52 pm
by iHs
Как звучат упругие предметы сложной формы — например, колокол, гонг, лист металла, пластина ксилофона?
Звук натянутой струны состоит из основного тона (f) и ряда гармоник (2*f, 3*f, ...), в связи с этим по своей природе он довольно простой и гармоничный.
В отличие от идеальной струны, имеющей бесконечно малую толщину и точный гармонический звукоряд, металлические пластины имеют ряд колебательных мод, частоты которых не обязательно имеют рациональные соотношения. Достаточно толстая или широкая пластина — как правило, плохой музыкальный инструмент. Но правильно изготовленный колокол или настроенная деревянная пластина маримбы (с тщательной подгонкой продольных, поперечных, диагональных и т.д. мод) имеет сложный, но приятный звук.
Если ударить в колокол или пластину посильнее, то колебательный процесс становится нелинейным — различные моды начинают влиять друг на друга, неравномерно ускоряются и замедляются, нарушается регулярность колебаний, и звук становится "грязным". Примерно, как если звучащую струну начинают дёргать за один из концов с произвольной частотой.
Данная программа симулирует частотную интермодуляцию нескольких синусоид. Параметр fmindex (нижний слайдер) задаёт коэффициент интермодуляции, от 0 до 1. Каждый из голосов влияет на частоту колебаний всех остальных голосов (кроме самого себя — иначе его частота начинала бы "уплывать" с ростом коэффициента). Меняя общую громкость (верхний слайдер), можно заметить, что чем громче звук, тем сильнее интермодуляция.
По желанию администратора можно добавить в примеры кода :)

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

Posted: Sun May 13, 2018 11:18 am
by NightRadio
Спасибо! Очень интересный пример!
Не могу только понять, почему пощелкивает звук немного. Может, что-то в вычислении фазы?

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

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

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

Posted: Wed May 16, 2018 9:34 am
by NightRadio
Причину нашел - это частота дискретизации 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).

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

Posted: Wed May 16, 2018 7:23 pm
by iHs
Спасибо за замечание, исправил, но щелчков я всё равно не слышу :pardon: