Exemple #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());
        }