Если вход также LE, порядок вывода байтов кажется инвертированным:
output8.push_back(input8[n*4+3]);
output8.push_back(input8[n*4+2]);
output8.push_back(input8[n*4+1]);
Редактировать Ради удовольствия, я бы подумал заменить его на это (поскольку похоже, что вы, возможно, используете C ++ 0x:
size_t i = 0;
std::copy_if(
reinterpret_cast<const int8_t*>(&*std::begin(audio_data)),
reinterpret_cast<const int8_t*>(&*std::end(audio_data)),
std::back_inserter(output),
[&i] (int) { return 0 == (i++ % 4); });
Также рассмотрите возможность замены
reserve
с resize
-
push_back
или выходной итератор с прямым итератором в целевой контейнер