Pergunta

Estou tentando decodificar um arquivo FLAC com formato de amostra de 24 bits usando openl es no Android. Originalmente, eu tinha meu SLDataFormat_PCM para o SLDataSink Configuração assim.

_pcm.formatType = SL_DATAFORMAT_PCM;
_pcm.numChannels = 2;
_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1;
_pcm.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16;
_pcm.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16;
_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;

Isso está funcionando bem para basicamente qualquer formato de dados. Felizmente o samplesPerSec não é respeitado (não quero reamostragem).

Agora, quero suportar a profundidade completa de um arquivo FLAC com amostras de 24 bits. Ao usar este formato, ele aparentemente executa uma conversão em profundidade, porque uma vez carrego o arquivo e verifique o ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE Informações, são 16.

Quando eu coloquei bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24; ou SL_PCMSAMPLEFORMAT_FIXED_32, então abre es rejeita

E/libOpenSLES(22706): pAudioSnk: bitsPerSample=32
W/libOpenSLES(22706): Leaving Engine::CreateAudioPlayer (SL_RESULT_CONTENT_UNSUPPORTED)

Alguma ideia de como isso deve funcionar? O Android está atualmente restrito a apenas 16 bits int? Eu também aceitaria flutuação de 32 bits, mas acho que também não funcionaria.

Foi útil?

Solução

Atualmente, ele suporta apenas 8 e 16 bits

Fontes:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top