Exemplo n.º 1
0
        //
        // 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());
        }
Exemplo n.º 2
0
        //
        // 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);
        }
Exemplo n.º 3
0
 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));
     }
 }