Вопрос

Я пытаюсь написать простое измерительное плагин для смелости, и это так же весело, как стучащие камни против моего черепа. Все, что я хочу сделать, это сделать кусок аудио и найдите среднее из всех образцов (кусок DC Offset.) Так что я могу представить это как номер для пользователя, и чтобы я мог вычесть смещение постоянного тока от образцов для дальнейшей обработки. Я знаю и понимаю математику, которую я хочу сделать, но я не понимаю, как это сделать в Lisp / Xlisp / Nyquist /.

Справочная информация в этой теме

Насколько я знаю, нет функции для этого. По какой-то причине, snd-avg функция На самом деле не вычисляет среднее значение звука, как вы могли ожидать. Это делает абсолютное значение в первую очередь и тогда вычисляет среднее вычисляет среднее, а затем делает абсолютное значение. Хотя есть отдельный snd-abs Функция, которая могла бы это сделать. > :(

Так что я думаю, я должен написать своими? Это означает преобразование звука в массив, а затем вычисляет среднее значение?

(snd-fetch-array sound len step)

Читает последовательные массивы образцов от звука, возвращая либо массив Flonums или Nil, когда звук завершается.

(snd-samples sound limit)

Преобразует образцы в массив Lisp.

Nyquist функции

И нет даже средней функции, поэтому я тоже должен сделать сумму себя? Но математические функции работают только над списками? Поэтому мне нужно преобразовать массив в список?

И это также будет использовать огромное количество памяти для более длительных форм волны (18 байтов на образец), поэтому было бы лучше отработать его в кусках и сделать кумулятивное среднее. Отказ Но я даже не знаю, как сделать неоптимизированную версию.

Нет, (hp s 0.1) не будет работать, так как:

  1. Я хочу удалить только DC и продолжать произвольно низкие частоты. 0,01 Гц должен пройти через неизмененные, постоянный ток должен быть удален.
  2. Фильтр высокого прохода является причинным, и первые образцы формы волны остаются неизменными, независимо от того, какая частота колена вы используете, что делает его бесполезным для измерения пиковых образцов и т. Д.
Это было полезно?

Решение

НЕВАЖНО

snd-maxsamp вычисляет абсолютное значение, а не snd-avg. snd-avg работает просто хорошо. Вот как выжать номер («Flonum») из него:

(snd-fetch (snd-avg s (round len) (round len) OP-AVERAGE))

Это производит отрицательное число для отрицательных образцов и положительное число для положительных образцов, как оно должно.

Если этот вопрос будет удален или оставлен в качестве примера для других?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top