private AudioTrackExecutor createExecutorForTrack(InternalAudioTrack track, AudioConfiguration configuration, AudioPlayerOptions playerOptions) { AudioSourceManager sourceManager = track.getSourceManager(); if (remoteNodeManager.isEnabled() && sourceManager != null && sourceManager.isTrackEncodable(track)) { return new RemoteAudioTrackExecutor(track, configuration, remoteNodeManager, playerOptions.volumeLevel); } else { AudioTrackExecutor customExecutor = track.createLocalExecutor(this); if (customExecutor != null) { return customExecutor; } else { int bufferDuration = Optional.ofNullable(playerOptions.frameBufferDuration.get()).orElse(frameBufferDuration); return new LocalAudioTrackExecutor(track, configuration, playerOptions, useSeekGhosting, bufferDuration); } } }