// // CreateTrack // private void CreateTrack(bool tryRelease) { int numToWrite, numWritten; if (effect.dataArray is sbyte[] byteData) { numToWrite = byteData.Length; track = new android.media.AudioTrack( android.media.AudioManager.STREAM_MUSIC, effect.sampleRate, effect.channelConfig, android.media.AudioFormat.ENCODING_PCM_8BIT, numToWrite, android.media.AudioTrack.MODE_STATIC); numWritten = track.write(byteData, 0, numToWrite); } else if (effect.dataArray is short[] shortData) { numToWrite = shortData.Length; track = new android.media.AudioTrack( android.media.AudioManager.STREAM_MUSIC, effect.sampleRate, effect.channelConfig, android.media.AudioFormat.ENCODING_PCM_16BIT, numToWrite * 2, android.media.AudioTrack.MODE_STATIC); numWritten = track.write(shortData, 0, numToWrite); } else { numToWrite = 0; numWritten = android.media.AudioTrack.ERROR_INVALID_OPERATION; } if (numWritten != numToWrite) { track = null; if (numWritten < 0) { if (SoundEffect.ReleaseInstance()) { CreateTrack(false); } } if (track == null) { GameRunner.Log($"SoundEffectInstance '{effect.Name}' error {numWritten}/{numToWrite}"); } return; } track.setNotificationMarkerPosition(effect.markerFrame); track.setPlaybackPositionUpdateListener(watcher = new SoundEffectInstanceWatcher()); }
// // ReleaseTrack // public bool ReleaseTrack(bool disposing) { var track = this.track; if (track != null) { if (disposing || track.getPlayState() == 1 /* android.media.AudioTrack.PLAYSTATE_STOPPED */) { this.track = null; track.setPlaybackPositionUpdateListener(null); track.stop(); track.release(); return(true); } } return(false); }
void android.media.AudioTrack.OnPlaybackPositionUpdateListener.onPeriodicNotification(android.media.AudioTrack arg0) { global::MonoJavaBridge.JNIEnv @__env = global::MonoJavaBridge.JNIEnv.ThreadEnv; if (!IsClrObject) { @__env.CallVoidMethod(this.JvmHandle, global::android.media.AudioTrack.OnPlaybackPositionUpdateListener_._onPeriodicNotification4891, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0)); } else { @__env.CallNonVirtualVoidMethod(this.JvmHandle, global::android.media.AudioTrack.OnPlaybackPositionUpdateListener_.staticClass, global::android.media.AudioTrack.OnPlaybackPositionUpdateListener_._onPeriodicNotification4891, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0)); } }