문제

Android에서 OpenSl ES를 사용하여 24 비트 샘플 형식의 FLAC 파일을 디코딩하려고합니다. 원래, 나는 내가 있었다 SLDataFormat_PCMSLDataSink 이렇게 설정합니다.

_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;

이것은 기본적으로 모든 데이터 형식에 잘 작동합니다. 운 좋게도 samplesPerSec 존중되지 않습니다 (리 샘플링을 원하지 않습니다).

이제 24 비트 샘플이 포함 된 FLAC 파일의 전체 비트를 지원하고 싶습니다. 이 형식을 사용할 때는 파일을로드 한 다음 ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE 정보, 그것은 16입니다.

내가 넣을 때 bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24; 또는 SL_PCMSAMPLEFORMAT_FIXED_32, 그런 다음 Opensl es가 거부합니다

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

이것이 어떻게 작동하는지 아십니까? Android는 현재 16 비트 int로만 제한되어 있습니까? 나는 또한 32 비트 플로트를 받아 들일 것이지만, 그것이 효과가 있다고 생각하지 않습니다.

도움이 되었습니까?

해결책

현재 8 비트와 16 비트 만 지원합니다

출처:

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top