играйте форму сигнала на определенной частоте в функции обратного вызова SDL

Виды являются довольно потрясающими, когда Вы не полностью доверяете сторону, отправляющую запросы в Вашу базу данных. Хороший пример мог бы быть Вами, создаст представление о таблицах для подрядчика так, чтобы все, что они видят, было строками, имеющими отношение к их проекту.

7
задан freedrull 3 November 2009 в 00:16
поделиться

2 ответа

На самом деле основная проблема не в вашем коде, а в ваших рассуждениях.

Итак, мы можем решить это уравнение:

64 * x = 674.208

и получить примерно 10.5.

Пока все хорошо. (На самом деле 674,208 должно быть 674,246, но это потому, что вы округлили 65,41 до 4 значащих цифр ранее.)

Таким образом, сигнал необходимо воспроизводить на 10,5% от его исходной скорости.

Нет! Сигнал должен быть замедлен в 10,5 раза. Это означает, что в нее нужно играть со скоростью 1 / 10,5 = 0,095 или 9,5% от исходной скорости.

2
ответ дан 7 December 2019 в 16:43
поделиться

Приведение (int) smp_index не вызывает проблему. Он просто растягивает волну - это потеря качества (возможно, ваши волновые данные должны быть длиннее 64 отсчетов), но не может изменить частоту. Скорее всего, проблема в том, что:

        if(smp_index > realLength)
            smp_index = 0;

должно быть:

        if(smp_index >= realLength)
            smp_index -= realLength;

У меня есть еще несколько примечаний для вас:

частота = частота дискретизации / длительность сигнала в сэмплах

Мм, если под «длительностью сигнала» вы имеете в виду период волны, то да. Т.е. если ваш 64-образный сигнал представляет собой синусоидальную волну с периодом 64, тогда да. Если 32 или 16, то все будет иначе. Если это что-то, что не делит 64 (например, 48 или 30), тогда ваша форма волны в первую очередь не периодическая.

Теперь:

u32 waveform_length;
out = (s8*) buf;
if(smp_index < waveform_length){

What ' s значение waveform_length ? По-моему, неинициализированный ...

1
ответ дан 7 December 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: