Выполнение обработки звука (хотя это также может быть обработка изображений) У меня есть одномерный массив чисел. быть 16-битными целыми числами со знаком, представляющими аудиосэмплы, этот вопрос может в равной степени применяться к числам с плавающей запятой или целым числам разного размера.)
Чтобы сопоставить аудио с разными частотами (например, смешать образец 44,1 кГц с отсчетом 22 кГц), Мне нужно либо растянуть, либо сжать массив значений до определенной длины.
Уменьшить массив вдвое просто: отбросить каждый второй образец.
[231, 8143, 16341, 2000, -9352, ...] => [231, 16341, -9352, ...]
Удвоение ширины массива немного менее просто: удвоить каждую запись на месте (или при желании выполнить некоторую интерполяцию между соседними «реальными» выборками).
[231, 8143, 16341, 2000, -9352, ...] => [231, 4187, 8143, 12242, 16341, ...]
Мне нужен эффективный, простой алгоритм, который обрабатывает любой коэффициент масштабирования и (в идеале) необязательно поддерживает выполнение интерполяции того или иного типа в процессе.
В моем случае используются массивы Ruby, но я с радостью возьму ответы практически на любом языке или псевдокоде.