Привет, я пытаюсь взять звук из открытого потока PortAudio, закодировать его с помощью opus, декодировать и снова воспроизвести с помощью portaudio.Присоединение к Portaudio и Opus
Im, делаю это как прототип, чтобы просто попытаться понять механику этих систем, так что нет реального интереса к этому конкретному потоку.
Thing is, portaudio дает буферы, где OPUS нужны фреймы. Ми думал не приведет меня к этому в Portaudio стороне:
err = (Pa_ReadStream(stream, readBuffer, FRAMES_PER_BUFFER));
if (err = paNoError){
qDebug()<<"Fail read";
qDebug()<<Pa_GetErrorText(err);
// blockingRecord = false;
}
while (pos<FRAMES_PER_BUFFER){
memcpy(frameBuffer,readBuffer+(pos*FRAME_SIZE*NUM_CHANNELS),FRAME_SIZE*CHANNELS);
compressedSound = om.encodeOpus(frameBuffer);
unCompressedSound = om.decodeOpus(compressedSound);
memcpy(readBuffer+(pos*FRAME_SIZE*NUM_CHANNELS),unCompressedSound,FRAME_SIZE*CHANNELS);
pos++;
}
pos = 0;
err = (Pa_WriteStream(stream, readBuffer, FRAMES_PER_BUFFER));
if (err != paNoError)
{
qDebug() << "FAIL WRITE";
qDebug()<<Pa_GetErrorText(err);
//blockingRecord = false;
}
И это на стороне OPUS:
unsigned char * OpusManager::encodeOpus(unsigned char *frame){
memcpy(encoded, frame, FRAME_SIZE*CHANNELS);
int ret = opus_encode(enc, encoded, FRAME_SIZE, compressed_buffer, encoded_data_size);
if (ret<0){
qDebug()<<"Failure while compressing sound";
return NULL;
}
return (compressed_buffer);
}
unsigned char * OpusManager::decodeOpus(unsigned char *frame){
int ret= opus_decode(dec, frame, encoded_data_size, decoded, FRAME_SIZE, 0);
if (ret<0){
qDebug()<<"Failure while decompressing sound";
return NULL;
}
memcpy(uncompressed_buffer, decoded, FRAME_SIZE*CHANNELS);
return (uncompressed_buffer);
}
Нет ошибок без encocing и совершенной СОУД. С кодированием я не получаю ошибок до вызова PA_Writestream, где я получаю «Выходной поток» PaError. Я предполагаю, что способ захвата кадров, которые должны быть реализованы, должен быть ошибочным, но не может найти информацию, чтобы помочь мне в этом.
thnks dude, который решил проблему. Как я сказал, я пропустил концепцию frame/buffer в opus ^^ – Xeyos