- set_audio_callback - какие параметры передаются в функцию audio_callback, что такое $stream, $frames, $time? Как узнать размер буфера, в который программа должна выводить сигнал (в мс, в отсчётах)? Как выполняется эта функция, в прерывании или в отдельном потоке? (этот вопрос важен, если она использует общий с основной программой глобальный массив.)
- fft( inverse, im, re, size ) - преобразование Фурье - можно догадаться, откуда берутся данные, но куда пишется результат?
- wavetable_generator - если я правильно понимаю, эта функция создаёт массив генераторов, проигрывающих одну и ту же звуковую волну (сэмпл), но с разной скоростью? Она работает постоянно в фоне или её нужно каждый раз вызывать, чтьбы заполнить аудио буфер?
Подскажите, пожалуйста, как работать с функциями
Подскажите, пожалуйста, как работать с функциями
Уважаемый NightRadio! Поясните, как работают следующие функции (в доках очень мало информации):
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Подскажите, пожалуйста, как работать с функциями
Добрый день!
Рекомендую ознакомиться с примерами fft и fft2 в папке graphics.
Если возникнут еще вопросы - пишите
Параметры для audio_callback:set_audio_callback - какие параметры передаются в функцию audio_callback, что такое $stream, $frames, $time? Как узнать размер буфера, в который программа должна выводить сигнал (в мс, в отсчётах)? Как выполняется эта функция, в прерывании или в отдельном потоке? (этот вопрос важен, если она использует общий с основной программой глобальный массив.)
- $stream - ID звукового потока; в текущей версии пока не используется;
- $userdata - параметр, который вы указали в set_audio_callback();
- $channels - массив контейнеров с каналами: буфер левого канала $channels[ 0 ], буфер правого канала $channels[ 1 ];
- $frames - количество отсчетов, которое нужно заполнить в каждом канале; это число может быть любым, но чаще всего оно находится в диапазоне от 1 до размера аудио-буфера, указанного в глобальных настройках Pixilang;
- $time - время, когда начнет играть запрашиваемый кусок звука; единица времени - системный тик (аналогично функциям get_ticks() и get_tps()).
Результат пишется в исходные контейнеры. То есть, исходные данные заменяются выходными.fft( inverse, im, re, size ) - преобразование Фурье - можно догадаться, откуда берутся данные, но куда пишется результат?
Рекомендую ознакомиться с примерами fft и fft2 в папке graphics.
Ее нужно каждый раз вызывать в audio_callback или где-то еще (в случае с offline-рендером звука).wavetable_generator - если я правильно понимаю, эта функция создаёт массив генераторов, проигрывающих одну и ту же звуковую волну (сэмпл), но с разной скоростью? Она работает постоянно в фоне или её нужно каждый раз вызывать, чтьбы заполнить аудио буфер?
Если возникнут еще вопросы - пишите
Re: Подскажите, пожалуйста, как работать с функциями
Спасибо за ответ! Кстати, в примерах встречается и такое объявление -
Система Windows7, встроенное аудио Realtek HD, длина буфера 2048 отсчётов, нельзя ли в самой программе явно задать размер буфера (с возвратом "успешно" или "нет", поддерживается ли такое значение), если нужна задержка поменьше?
Скажите, в каком формате выполняются вычисления, какой тип у числовых переменных по умолчанию - int32? Если в выражении есть дробное число, например 2.0 или M_PI, то результат будет float32? Если я скопирую данные из контейнера int16 в float32 функцией copy, то будет ли приведение типов?
Code: Select all
fn audio_callback(
$stream,
$userdata,
$channels,
$frames,
$output_time_in_system_ticks,
$in_channels,
$latency_in_frames )
Скажите, в каком формате выполняются вычисления, какой тип у числовых переменных по умолчанию - int32? Если в выражении есть дробное число, например 2.0 или M_PI, то результат будет float32? Если я скопирую данные из контейнера int16 в float32 функцией copy, то будет ли приведение типов?
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Подскажите, пожалуйста, как работать с функциями
Да, там добавлены два параметра - в мануал не успел их вписать :)Кстати, в примерах встречается и такое объявление...
$in_channels - аналогично $channels, только в обратную сторону. То есть, эти каналы не надо заполнять - они уже заполнены данными с микрофона или линейного входа.
$latency_in_frames - задержка между рендером звука и его физическим выходом на динамики. Измеряется в отсчетах. Чаще всего, это число равно размеру буфера, заданного в настройках Pixilang. Но может быть и больше, если аудио драйвер будет более точно считать, учитывая дополнительные задержки на низком уровне.
Пока нет. Есть два пути сменить длину буфера:Система Windows7, встроенное аудио Realtek HD, длина буфера 2048 отсчётов, нельзя ли в самой программе явно задать размер буфера (с возвратом "успешно" или "нет", поддерживается ли такое значение), если нужна задержка поменьше?
1) в системных настройках Pixilang: в стартовом диалоге кнопка "Настр." или через вызов функции prefs_dialog();
2) в файле pixilang_config.ini (параметр buffer xxxx), который должен лежать в одной папке с pixilang.
На все вопросы - да :)Скажите, в каком формате выполняются вычисления, какой тип у числовых переменных по умолчанию - int32? Если в выражении есть дробное число, например 2.0 или M_PI, то результат будет float32? Если я скопирую данные из контейнера int16 в float32 функцией copy, то будет ли приведение типов?