2011-12-23 4 views
3

Как я могу преобразовать массив типа short в массив типа double в C/C++?Преобразование массива шорт в массив удвоений

У меня есть код для чтения аудиоданных из wav-файла, а output - массив типа short. Поэтому теперь я хочу использовать эти данные для FFT (я не хочу использовать библиотеки).

Любые уловки или идеи?

+2

Почему нет простой петли? Или вы запрашиваете более эффективное решение с помощью SSE? – Mysticial

ответ

7

Вы не можете преобразовать массив; Однако вы можете создать новый массив с преобразованных значений:

#include <iterator> 
#include <algorithm> 

short src[10] = ...; 

double dst[sizeof(src)/sizeof(short)]; 

std::copy(std::begin(src), std::end(src), dst); // generic, C++11 
std::copy(src, src + 10, dst);     // a bit more hackish 

Еще лучше было бы использовать std::array<float, 10> src; и т.д.

Если ваши «массивы» действительно динамические структуры данных, становится еще проще:

std::vector<float> src = ... ; 
std::vector<double> dst(src.begin(), src.end()); 
+0

Скорее всего, он хочет, чтобы он нормализовался до диапазона от -1,0 до 1,0, что является стандартом в аудио. Его ввод, скорее всего, не имеет знака, поэтому ему нужно «(src - 32K)/32K' для каждого элемента. –

+4

Предпочитаете 'sizeof (src)/sizeof (src [0])' over 'sizeof (src)/sizeof (short)'. На всякий случай в будущем вы измените тип src. –

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