/// <summary> /// Executes an audio track with the given player and volume. </summary> /// <param name="listener"> A listener for track state events </param> /// <param name="track"> The audio track to execute </param> /// <param name="configuration"> The audio configuration to use for executing </param> /// <param name="volumeLevel"> The mutable volume level to use </param> //JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET: //ORIGINAL LINE: public void executeTrack(final TrackStateListener listener, InternalAudioTrack track, AudioConfiguration configuration, AtomicInteger volumeLevel) public virtual void executeTrack(TrackStateListener listener, InternalAudioTrack track, AudioConfiguration configuration, AtomicInteger volumeLevel) { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final AudioTrackExecutor executor = createExecutorForTrack(track, configuration, volumeLevel); AudioTrackExecutor executor = createExecutorForTrack(track, configuration, volumeLevel); track.assignExecutor(executor, true); trackPlaybackExecutorService.execute(() => executor.execute(listener)); }
private AudioTrackExecutor createExecutorForTrack(InternalAudioTrack track, AudioConfiguration configuration, AtomicInteger volumeLevel) { AudioSourceManager sourceManager = track.SourceManager; if (remoteNodeManager.Enabled && sourceManager != null && sourceManager.isTrackEncodable(track)) { return(new RemoteAudioTrackExecutor(track, configuration, remoteNodeManager, volumeLevel)); } else { AudioTrackExecutor customExecutor = track.createLocalExecutor(this); if (customExecutor != null) { return(customExecutor); } else { return(new LocalAudioTrackExecutor(track, configuration, volumeLevel, useSeekGhosting, frameBufferDuration)); } } }