2010-08-08 4 views
4

Я пытаюсь написать простой измерительный плагин для Audacity, и это примерно так же весело, как колотить скалы против моего черепа. Все, что я хочу сделать, это взять фрагмент звука и найти среднее значение для всех образцов (chunk's DC offset), чтобы я мог представить его как число для пользователя и чтобы я мог вычесть смещение постоянного тока из образцов для дальнейшая обработка. Я знаю и понимаю математику, которую хочу сделать, но я не понимаю, как это сделать в Lisp/XLisp/Nyquist/что угодно.Как найти среднее/среднее значение звука в Nyquist

Background information in this thread

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

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

(snd-fetch-array sound len step)

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

(snd-samples sound limit)

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

Nyquist Functions

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

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

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

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

ответ

0

NEVERMIND

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

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

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

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

+1

Обязательно отправьте вопрос, чтобы его могли найти люди с аналогичными проблемами при поиске SO. –

Смежные вопросы