O OpenSL pode gravar a si mesmo?
Pergunta
Gostaria de capturar o áudio de saída de um jogo e gravá-lo em um arquivo de áudio enquanto ele é reproduzido.Isso é possível dentro da estrutura do OpenSL?Como conectar o OutputMix a um AudioRecorder ou algo assim?
Agradeço antecipadamente.
Solução
Você pode registrar um retorno de chamada para a fila e obter o buffer de saída antes/depois de ser enfileirado na fila de buffer para saída.Você poderia ter um wavBuffer (uma matriz curta com o comprimento do tamanho do buffer) que é gravado em cada enfileiramento de um novo buffer.O conteúdo desse buffer é então gravado em um arquivo.
outBuffer = p->outputBuffer[p->currentOutputBuffer]; // obtain float buffer
for ( int i = 0; i < bufferSize; ++i )
wavBuffer = ( short ) outBuffer[ i ] * 32768; // convert float to short
// now append contents of wavBuffer into a file
A configuração básica do OpenSL para o retorno de chamada da fila é explicada com alguns detalhes nesta página
E um meio muito básico de criar um arquivo WAV em C++ pode ser encontrado aqui observe que você deve ter uma ideia bastante definitiva do tamanho real do arquivo WAV total, pois faz parte de seu cabeçalho.