java layer调用native层的android_media_AudioTrack_get_min_buff_size()确定audio track buffer的min size,再根据这个size创建AudioTrack

// ----------------------------------------------------------------------------

// returns the minimum required size for the successful creation of a streaming AudioTrack

// returns -1 if there was an error querying the hardware.

static jint android_media_AudioTrack_get_min_buff_size(JNIEnv *env, jobject thiz,

jint sampleRateInHertz, jint channelCount, jint audioFormat) {

size_t frameCount;

const status_t status = AudioTrack::getMinFrameCount(&frameCount, AUDIO_STREAM_DEFAULT,

sampleRateInHertz);

if (status != NO_ERROR) {

ALOGE("AudioTrack::getMinFrameCount() for sample rate %d failed with status %d",

sampleRateInHertz, status);

return -1;

}

const audio_format_t format = audioFormatToNative(audioFormat);

if (audio_has_proportional_frames(format)) {

const size_t bytesPerSample = audio_bytes_per_sample(format);

return frameCount * channelCount * bytesPerSample;

} else {

return frameCount;

}

}

原文:https://www.cnblogs.com/aspirs/p/11482000.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐