Я использую Portaudio 19 (с блокировкой ввода / вывода) для захвата голоса и передачи его в инструментарий, который его обработает.
Аудиоформатом является paInt16 (то есть подписанный short int), а буфер (где хранятся семплы) имеет тип подписанного short int.
Ввод инструментария должен иметь тип float.
Мне нужно сохранить те же значения буфера в структуре данных инструментария,
но после выполнения преобразования сэмплов из короткого в плавающий сигнал стал искаженным. На изображении первый — это короткая версия сигнала, а второй — версия с плавающей точкой (обе в необработанном аудиофайле). (http://postimg.org/image/paajkbcu9/)
Любая идея?
Изменить: вот код
for( int i = 0; i < d->frag_dim_in_sample;i++ )
(*d->ready->v)(i) = float(temp->frame[i]);
Думая, что это была проблема, я попробовал это без изменений
for( int i = 0; i < d->frag_dim_in_sample;i++ )
(*d->ready->v)(i) = *reinterpret_cast<float*>(&temp->frame[i]);
Задача ещё не решена.