В моем приложении мне нужно ввести аудиофайл и получить массив сэмплов для работы.
Я использовал ffmpeg для создания функции, которая вводит путь к файлу, положение во времени, с которого нужно начать выводить сэмплы, и длину фрагмента для декодирования в секундах.
Когда я пытаюсь декодировать файл harp.wav все работает нормально, и я могу построить образцы, как на изображении plot-harp.png
Это файл WAV, закодированный как: pcm_u8, 11025 Гц, 1 канал, u8, 88 кбит/с
Проблемы возникают, когда я пытаюсь декодировать файл demo-unprocessed.wav.
Он выводит серию бессмысленных примеров. Он выводит серию образцов, представленных на изображении graph1-demo.jpg.
Это файл WAV, закодированный как: pcm_s16le, 44100 Гц, 1 канал, s16, 705 кбит/с.
IDK, где проблема в моем коде, я уже проверил код до и после декодирования с помощью FFMPEG, и он работает абсолютно нормально.
Вот код dataReader.cpp:
Код: Выделить всё
/* Start by including the necessary */
#include "dataReader.h"
#include
#include
#include
#ifdef __cplusplus
extern "C" {
#endif
#include
#include
#include
#ifdef __cplusplus
}
#endif
using namespace std;
/* initialization function for audioChunk */
audioChunk::audioChunk(){
data=NULL;
size=0;
bitrate=0;
}
/* function to get back chunk lenght in seconds */
int audioChunk::getTimeLenght(){
return size/bitrate;
}
/* initialization function for audioChunk_dNorm */
audioChunk_dNorm::audioChunk_dNorm(){
data=NULL;
size=0;
bitrate=0;
}
/* function to get back chunk lenght in seconds */
int audioChunk_dNorm::getTimeLenght(){
return size/bitrate;
}
/* function to normalize audioChunk into audioChunk_dNorm */
void audioChunk_dNorm::fillAudioChunk(audioChunk* cnk){
size=cnk->size;
bitrate=cnk->bitrate;
double min=cnk->data[0];
double max=cnk->data[0];
for(int i=0;isize;i++){
if(*(cnk->data+i)>max) max=*(cnk->data+i);
else if(*(cnk->data+i)data+i);
}
data=new double[size];
for(int i=0;idata[i]+256*data[i+1];
if(data[i]!=255) data[i]=2*((cnk->data[i])-(max-min)/2)/(max-min);
else data[i]=0;
}
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/31730161/decoding-pcm-s16le-with-ffmpeg[/url]
Мобильная версия