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