class android.speech.tts.FileSynthesisCallback extends android.speech.tts.AbstractSynthesisCallback
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: android.speech.tts.FileSynthesisCallback
  super_class: android.speech.tts.AbstractSynthesisCallback
{
  private static final java.lang.String TAG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "FileSynthesisRequest"

  private static final boolean DBG;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int MAX_AUDIO_BUFFER_SIZE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 8192

  private static final int WAV_HEADER_LENGTH;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 44

  private static final short WAV_FORMAT_PCM;
    descriptor: S
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private final java.lang.Object mStateLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private int mSampleRateInHz;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int mAudioFormat;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int mChannelCount;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private java.nio.channels.FileChannel mFileChannel;
    descriptor: Ljava/nio/channels/FileChannel;
    flags: (0x0002) ACC_PRIVATE

  private final android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher mDispatcher;
    descriptor: Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private boolean mStarted;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean mDone;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  protected int mStatusCode;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  void <init>(java.nio.channels.FileChannel, android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher, boolean);
    descriptor: (Ljava/nio/channels/FileChannel;Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;Z)V
    flags: (0x0000) 
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // android.speech.tts.FileSynthesisCallback this
        start local 1 // java.nio.channels.FileChannel fileChannel
        start local 2 // android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher dispatcher
        start local 3 // boolean clientIsUsingV2
         0: .line 59
            aload 0 /* this */
            iload 3 /* clientIsUsingV2 */
            invokespecial android.speech.tts.AbstractSynthesisCallback.<init>:(Z)V
         1: .line 41
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
         2: .line 51
            aload 0 /* this */
            iconst_0
            putfield android.speech.tts.FileSynthesisCallback.mStarted:Z
         3: .line 52
            aload 0 /* this */
            iconst_0
            putfield android.speech.tts.FileSynthesisCallback.mDone:Z
         4: .line 60
            aload 0 /* this */
            aload 1 /* fileChannel */
            putfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
         5: .line 61
            aload 0 /* this */
            aload 2 /* dispatcher */
            putfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
         6: .line 62
            aload 0 /* this */
            iconst_0
            putfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
         7: .line 63
            return
        end local 3 // boolean clientIsUsingV2
        end local 2 // android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher dispatcher
        end local 1 // java.nio.channels.FileChannel fileChannel
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    8     0             this  Landroid/speech/tts/FileSynthesisCallback;
            0    8     1      fileChannel  Ljava/nio/channels/FileChannel;
            0    8     2       dispatcher  Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            0    8     3  clientIsUsingV2  Z
    MethodParameters:
                 Name  Flags
      fileChannel      
      dispatcher       
      clientIsUsingV2  

  void stop();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 67
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 68
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDone:Z
            ifeq 4
         2: .line 69
            aload 1
            monitorexit
         3: return
         4: .line 71
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            bipush -2
            if_icmpne 7
         5: .line 72
            aload 1
            monitorexit
         6: return
         7: .line 75
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            bipush -2
            putfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
         8: .line 76
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.cleanUp:()V
         9: .line 77
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnStop:()V
        10: .line 67
            aload 1
            monitorexit
        11: goto 14
      StackMap locals:
      StackMap stack: java.lang.Throwable
        12: aload 1
            monitorexit
        13: athrow
        14: .line 79
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Landroid/speech/tts/FileSynthesisCallback;
      Exception table:
        from    to  target  type
           1     3      12  any
           4     6      12  any
           7    11      12  any
          12    13      12  any

  private void cleanUp();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 85
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.closeFile:()V
         1: .line 86
            return
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/speech/tts/FileSynthesisCallback;

  private void closeFile();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 93
            aload 0 /* this */
            aconst_null
            putfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
         1: .line 94
            return
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/speech/tts/FileSynthesisCallback;

  public int getMaxBufferSize();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 98
            sipush 8192
            ireturn
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/speech/tts/FileSynthesisCallback;

  public int start(int, int, int);
    descriptor: (III)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=4
        start local 0 // android.speech.tts.FileSynthesisCallback this
        start local 1 // int sampleRateInHz
        start local 2 // int audioFormat
        start local 3 // int channelCount
         0: .line 107
            iload 2 /* audioFormat */
            iconst_3
            if_icmpeq 7
         1: .line 108
            iload 2 /* audioFormat */
            iconst_2
            if_icmpeq 7
         2: .line 109
            iload 2 /* audioFormat */
            iconst_4
            if_icmpeq 7
         3: .line 110
            ldc "FileSynthesisRequest"
            new java.lang.StringBuilder
            dup
            ldc "Audio format encoding "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 2 /* audioFormat */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " not supported. Please use one "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         4: .line 111
            ldc "of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
         5: .line 112
            ldc "AudioFormat.ENCODING_PCM_FLOAT"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         6: .line 110
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         7: .line 114
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            iload 1 /* sampleRateInHz */
            iload 2 /* audioFormat */
            iload 3 /* channelCount */
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnBeginSynthesis:(III)V
         8: .line 116
            aconst_null
            astore 4 /* fileChannel */
        start local 4 // java.nio.channels.FileChannel fileChannel
         9: .line 117
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 5
            monitorenter
        10: .line 118
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            bipush -2
            if_icmpne 13
        11: .line 120
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.errorCodeOnStop:()I
            aload 5
            monitorexit
        12: ireturn
        13: .line 122
      StackMap locals: java.nio.channels.FileChannel java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            ifeq 16
        14: .line 124
            aload 5
            monitorexit
        15: iconst_m1
            ireturn
        16: .line 126
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStarted:Z
            ifeq 20
        17: .line 127
            ldc "FileSynthesisRequest"
            ldc "Start called twice"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        18: .line 128
            aload 5
            monitorexit
        19: iconst_m1
            ireturn
        20: .line 130
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield android.speech.tts.FileSynthesisCallback.mStarted:Z
        21: .line 131
            aload 0 /* this */
            iload 1 /* sampleRateInHz */
            putfield android.speech.tts.FileSynthesisCallback.mSampleRateInHz:I
        22: .line 132
            aload 0 /* this */
            iload 2 /* audioFormat */
            putfield android.speech.tts.FileSynthesisCallback.mAudioFormat:I
        23: .line 133
            aload 0 /* this */
            iload 3 /* channelCount */
            putfield android.speech.tts.FileSynthesisCallback.mChannelCount:I
        24: .line 135
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnStart:()V
        25: .line 136
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
            astore 4 /* fileChannel */
        26: .line 117
            aload 5
            monitorexit
        27: goto 30
      StackMap locals:
      StackMap stack: java.lang.Throwable
        28: aload 5
            monitorexit
        29: athrow
        30: .line 140
      StackMap locals:
      StackMap stack:
            aload 4 /* fileChannel */
            bipush 44
            invokestatic java.nio.ByteBuffer.allocate:(I)Ljava/nio/ByteBuffer;
            invokevirtual java.nio.channels.FileChannel.write:(Ljava/nio/ByteBuffer;)I
            pop
        31: .line 141
            iconst_0
            ireturn
        32: .line 142
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 5 /* ex */
        start local 5 // java.io.IOException ex
        33: .line 143
            ldc "FileSynthesisRequest"
            ldc "Failed to write wav header to output file descriptor"
            aload 5 /* ex */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        34: .line 144
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 6
            monitorenter
        35: .line 145
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.cleanUp:()V
        36: .line 146
            aload 0 /* this */
            bipush -5
            putfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
        37: .line 144
            aload 6
            monitorexit
        38: goto 41
      StackMap locals: android.speech.tts.FileSynthesisCallback int int int java.nio.channels.FileChannel java.io.IOException java.lang.Object
      StackMap stack: java.lang.Throwable
        39: aload 6
            monitorexit
        40: athrow
        41: .line 148
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        end local 5 // java.io.IOException ex
        end local 4 // java.nio.channels.FileChannel fileChannel
        end local 3 // int channelCount
        end local 2 // int audioFormat
        end local 1 // int sampleRateInHz
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   42     0            this  Landroid/speech/tts/FileSynthesisCallback;
            0   42     1  sampleRateInHz  I
            0   42     2     audioFormat  I
            0   42     3    channelCount  I
            9   42     4     fileChannel  Ljava/nio/channels/FileChannel;
           33   42     5              ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          10    12      28  any
          13    15      28  any
          16    19      28  any
          20    27      28  any
          28    29      28  any
          30    31      32  Class java.io.IOException
          35    38      39  any
          39    40      39  any
    MethodParameters:
                Name  Flags
      sampleRateInHz  
      audioFormat     
      channelCount    

  public int audioAvailable(byte[], int, int);
    descriptor: ([BII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=8, args_size=4
        start local 0 // android.speech.tts.FileSynthesisCallback this
        start local 1 // byte[] buffer
        start local 2 // int offset
        start local 3 // int length
         0: .line 158
            aconst_null
            astore 4 /* fileChannel */
        start local 4 // java.nio.channels.FileChannel fileChannel
         1: .line 159
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 5
            monitorenter
         2: .line 160
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            bipush -2
            if_icmpne 5
         3: .line 162
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.errorCodeOnStop:()I
            aload 5
            monitorexit
         4: ireturn
         5: .line 164
      StackMap locals: java.nio.channels.FileChannel java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            ifeq 8
         6: .line 166
            aload 5
            monitorexit
         7: iconst_m1
            ireturn
         8: .line 168
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
            ifnonnull 13
         9: .line 169
            ldc "FileSynthesisRequest"
            ldc "File not open"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        10: .line 170
            aload 0 /* this */
            bipush -5
            putfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
        11: .line 171
            aload 5
            monitorexit
        12: iconst_m1
            ireturn
        13: .line 173
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStarted:Z
            ifne 17
        14: .line 174
            ldc "FileSynthesisRequest"
            ldc "Start method was not called"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        15: .line 175
            aload 5
            monitorexit
        16: iconst_m1
            ireturn
        17: .line 177
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
            astore 4 /* fileChannel */
        18: .line 159
            aload 5
            monitorexit
        19: goto 22
      StackMap locals:
      StackMap stack: java.lang.Throwable
        20: aload 5
            monitorexit
        21: athrow
        22: .line 180
      StackMap locals:
      StackMap stack:
            iload 3 /* length */
            newarray 8
            astore 5 /* bufferCopy */
        start local 5 // byte[] bufferCopy
        23: .line 181
            aload 1 /* buffer */
            iload 2 /* offset */
            aload 5 /* bufferCopy */
            iconst_0
            iload 3 /* length */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
        24: .line 182
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            aload 5 /* bufferCopy */
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnAudioAvailable:([B)V
        25: .line 185
            aload 4 /* fileChannel */
            aload 1 /* buffer */
            iload 2 /* offset */
            iload 3 /* length */
            invokestatic java.nio.ByteBuffer.wrap:([BII)Ljava/nio/ByteBuffer;
            invokevirtual java.nio.channels.FileChannel.write:(Ljava/nio/ByteBuffer;)I
            pop
        26: .line 186
            iconst_0
            ireturn
        27: .line 187
      StackMap locals: android.speech.tts.FileSynthesisCallback byte[] int int java.nio.channels.FileChannel byte[]
      StackMap stack: java.io.IOException
            astore 6 /* ex */
        start local 6 // java.io.IOException ex
        28: .line 188
            ldc "FileSynthesisRequest"
            ldc "Failed to write to output file descriptor"
            aload 6 /* ex */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        29: .line 189
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 7
            monitorenter
        30: .line 190
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.cleanUp:()V
        31: .line 191
            aload 0 /* this */
            bipush -5
            putfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
        32: .line 189
            aload 7
            monitorexit
        33: goto 36
      StackMap locals: android.speech.tts.FileSynthesisCallback byte[] int int java.nio.channels.FileChannel byte[] java.io.IOException java.lang.Object
      StackMap stack: java.lang.Throwable
        34: aload 7
            monitorexit
        35: athrow
        36: .line 193
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        end local 6 // java.io.IOException ex
        end local 5 // byte[] bufferCopy
        end local 4 // java.nio.channels.FileChannel fileChannel
        end local 3 // int length
        end local 2 // int offset
        end local 1 // byte[] buffer
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   37     0         this  Landroid/speech/tts/FileSynthesisCallback;
            0   37     1       buffer  [B
            0   37     2       offset  I
            0   37     3       length  I
            1   37     4  fileChannel  Ljava/nio/channels/FileChannel;
           23   37     5   bufferCopy  [B
           28   37     6           ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           2     4      20  any
           5     7      20  any
           8    12      20  any
          13    16      20  any
          17    19      20  any
          20    21      20  any
          25    26      27  Class java.io.IOException
          30    33      34  any
          34    35      34  any
    MethodParameters:
        Name  Flags
      buffer  
      offset  
      length  

  public int done();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=7, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 200
            aconst_null
            astore 1 /* fileChannel */
        start local 1 // java.nio.channels.FileChannel fileChannel
         1: .line 202
            iconst_0
            istore 2 /* sampleRateInHz */
        start local 2 // int sampleRateInHz
         2: .line 203
            iconst_0
            istore 3 /* audioFormat */
        start local 3 // int audioFormat
         3: .line 204
            iconst_0
            istore 4 /* channelCount */
        start local 4 // int channelCount
         4: .line 206
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 5
            monitorenter
         5: .line 207
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDone:Z
            ifeq 9
         6: .line 208
            ldc "FileSynthesisRequest"
            ldc "Duplicate call to done()"
            invokestatic android.util.Log.w:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         7: .line 211
            aload 5
            monitorexit
         8: iconst_m1
            ireturn
         9: .line 213
      StackMap locals: android.speech.tts.FileSynthesisCallback java.nio.channels.FileChannel int int int java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            bipush -2
            if_icmpne 12
        10: .line 215
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.errorCodeOnStop:()I
            aload 5
            monitorexit
        11: ireturn
        12: .line 217
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            ifeq 16
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            bipush -2
            if_icmpeq 16
        13: .line 218
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnError:(I)V
        14: .line 219
            aload 5
            monitorexit
        15: iconst_m1
            ireturn
        16: .line 221
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
            ifnonnull 20
        17: .line 222
            ldc "FileSynthesisRequest"
            ldc "File not open"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        18: .line 223
            aload 5
            monitorexit
        19: iconst_m1
            ireturn
        20: .line 225
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_1
            putfield android.speech.tts.FileSynthesisCallback.mDone:Z
        21: .line 226
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mFileChannel:Ljava/nio/channels/FileChannel;
            astore 1 /* fileChannel */
        22: .line 227
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mSampleRateInHz:I
            istore 2 /* sampleRateInHz */
        23: .line 228
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mAudioFormat:I
            istore 3 /* audioFormat */
        24: .line 229
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mChannelCount:I
            istore 4 /* channelCount */
        25: .line 206
            aload 5
            monitorexit
        26: goto 29
      StackMap locals:
      StackMap stack: java.lang.Throwable
        27: aload 5
            monitorexit
        28: athrow
        29: .line 234
      StackMap locals:
      StackMap stack:
            aload 1 /* fileChannel */
            lconst_0
            invokevirtual java.nio.channels.FileChannel.position:(J)Ljava/nio/channels/FileChannel;
            pop
        30: .line 235
            aload 1 /* fileChannel */
            invokevirtual java.nio.channels.FileChannel.size:()J
            ldc 44
            lsub
            l2i
            istore 5 /* dataLength */
        start local 5 // int dataLength
        31: .line 236
            aload 1 /* fileChannel */
        32: .line 237
            aload 0 /* this */
            iload 2 /* sampleRateInHz */
            iload 3 /* audioFormat */
            iload 4 /* channelCount */
            iload 5 /* dataLength */
            invokevirtual android.speech.tts.FileSynthesisCallback.makeWavHeader:(IIII)Ljava/nio/ByteBuffer;
        33: .line 236
            invokevirtual java.nio.channels.FileChannel.write:(Ljava/nio/ByteBuffer;)I
            pop
        34: .line 239
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 6
            monitorenter
        35: .line 240
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.closeFile:()V
        36: .line 241
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnSuccess:()V
        37: .line 242
            aload 6
            monitorexit
        38: iconst_0
            ireturn
        39: .line 239
      StackMap locals: android.speech.tts.FileSynthesisCallback java.nio.channels.FileChannel int int int int java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 6
            monitorexit
        40: athrow
        end local 5 // int dataLength
        41: .line 244
      StackMap locals: android.speech.tts.FileSynthesisCallback java.nio.channels.FileChannel int int int
      StackMap stack: java.io.IOException
            astore 5 /* ex */
        start local 5 // java.io.IOException ex
        42: .line 245
            ldc "FileSynthesisRequest"
            ldc "Failed to write to output file descriptor"
            aload 5 /* ex */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        43: .line 246
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 6
            monitorenter
        44: .line 247
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.cleanUp:()V
        45: .line 246
            aload 6
            monitorexit
        46: goto 49
      StackMap locals: android.speech.tts.FileSynthesisCallback java.nio.channels.FileChannel int int int java.io.IOException java.lang.Object
      StackMap stack: java.lang.Throwable
        47: aload 6
            monitorexit
        48: athrow
        49: .line 249
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        end local 5 // java.io.IOException ex
        end local 4 // int channelCount
        end local 3 // int audioFormat
        end local 2 // int sampleRateInHz
        end local 1 // java.nio.channels.FileChannel fileChannel
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   50     0            this  Landroid/speech/tts/FileSynthesisCallback;
            1   50     1     fileChannel  Ljava/nio/channels/FileChannel;
            2   50     2  sampleRateInHz  I
            3   50     3     audioFormat  I
            4   50     4    channelCount  I
           31   41     5      dataLength  I
           42   50     5              ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           5     8      27  any
           9    11      27  any
          12    15      27  any
          16    19      27  any
          20    26      27  any
          27    28      27  any
          35    38      39  any
          39    40      39  any
          29    38      41  Class java.io.IOException
          39    41      41  Class java.io.IOException
          44    46      47  any
          47    48      47  any

  public void error();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 255
            aload 0 /* this */
            bipush -3
            invokevirtual android.speech.tts.FileSynthesisCallback.error:(I)V
         1: .line 256
            return
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/speech/tts/FileSynthesisCallback;

  public void error(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // android.speech.tts.FileSynthesisCallback this
        start local 1 // int errorCode
         0: .line 261
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 262
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDone:Z
            ifeq 4
         2: .line 263
            aload 2
            monitorexit
         3: return
         4: .line 265
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            invokevirtual android.speech.tts.FileSynthesisCallback.cleanUp:()V
         5: .line 266
            aload 0 /* this */
            iload 1 /* errorCode */
            putfield android.speech.tts.FileSynthesisCallback.mStatusCode:I
         6: .line 261
            aload 2
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 2
            monitorexit
         9: athrow
        10: .line 268
      StackMap locals:
      StackMap stack:
            return
        end local 1 // int errorCode
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0       this  Landroid/speech/tts/FileSynthesisCallback;
            0   11     1  errorCode  I
      Exception table:
        from    to  target  type
           1     3       8  any
           4     7       8  any
           8     9       8  any
    MethodParameters:
           Name  Flags
      errorCode  

  public boolean hasStarted();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 272
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 273
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStarted:Z
            aload 1
            monitorexit
         2: ireturn
         3: .line 272
      StackMap locals: android.speech.tts.FileSynthesisCallback java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         4: athrow
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Landroid/speech/tts/FileSynthesisCallback;
      Exception table:
        from    to  target  type
           1     2       3  any
           3     4       3  any

  public boolean hasFinished();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.speech.tts.FileSynthesisCallback this
         0: .line 279
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mStateLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 280
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDone:Z
            aload 1
            monitorexit
         2: ireturn
         3: .line 279
      StackMap locals: android.speech.tts.FileSynthesisCallback java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         4: athrow
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Landroid/speech/tts/FileSynthesisCallback;
      Exception table:
        from    to  target  type
           1     2       3  any
           3     4       3  any

  private java.nio.ByteBuffer makeWavHeader(int, int, int, int);
    descriptor: (IIII)Ljava/nio/ByteBuffer;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=11, args_size=5
        start local 0 // android.speech.tts.FileSynthesisCallback this
        start local 1 // int sampleRateInHz
        start local 2 // int audioFormat
        start local 3 // int channelCount
        start local 4 // int dataLength
         0: .line 286
            iload 2 /* audioFormat */
            invokestatic android.media.AudioFormat.getBytesPerSample:(I)I
            istore 5 /* sampleSizeInBytes */
        start local 5 // int sampleSizeInBytes
         1: .line 287
            iload 1 /* sampleRateInHz */
            iload 5 /* sampleSizeInBytes */
            imul
            iload 3 /* channelCount */
            imul
            istore 6 /* byteRate */
        start local 6 // int byteRate
         2: .line 288
            iload 5 /* sampleSizeInBytes */
            iload 3 /* channelCount */
            imul
            i2s
            istore 7 /* blockAlign */
        start local 7 // short blockAlign
         3: .line 289
            iload 5 /* sampleSizeInBytes */
            bipush 8
            imul
            i2s
            istore 8 /* bitsPerSample */
        start local 8 // short bitsPerSample
         4: .line 291
            bipush 44
            newarray 8
            astore 9 /* headerBuf */
        start local 9 // byte[] headerBuf
         5: .line 292
            aload 9 /* headerBuf */
            invokestatic java.nio.ByteBuffer.wrap:([B)Ljava/nio/ByteBuffer;
            astore 10 /* header */
        start local 10 // java.nio.ByteBuffer header
         6: .line 293
            aload 10 /* header */
            getstatic java.nio.ByteOrder.LITTLE_ENDIAN:Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
            pop
         7: .line 295
            aload 10 /* header */
            iconst_4
            newarray 8
            dup
            iconst_0
            bipush 82
            bastore
            dup
            iconst_1
            bipush 73
            bastore
            dup
            iconst_2
            bipush 70
            bastore
            dup
            iconst_3
            bipush 70
            bastore
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
         8: .line 296
            aload 10 /* header */
            iload 4 /* dataLength */
            bipush 44
            iadd
            bipush 8
            isub
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
         9: .line 297
            aload 10 /* header */
            iconst_4
            newarray 8
            dup
            iconst_0
            bipush 87
            bastore
            dup
            iconst_1
            bipush 65
            bastore
            dup
            iconst_2
            bipush 86
            bastore
            dup
            iconst_3
            bipush 69
            bastore
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        10: .line 298
            aload 10 /* header */
            iconst_4
            newarray 8
            dup
            iconst_0
            bipush 102
            bastore
            dup
            iconst_1
            bipush 109
            bastore
            dup
            iconst_2
            bipush 116
            bastore
            dup
            iconst_3
            bipush 32
            bastore
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        11: .line 299
            aload 10 /* header */
            bipush 16
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        12: .line 300
            aload 10 /* header */
            iconst_1
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        13: .line 301
            aload 10 /* header */
            iload 3 /* channelCount */
            i2s
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        14: .line 302
            aload 10 /* header */
            iload 1 /* sampleRateInHz */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        15: .line 303
            aload 10 /* header */
            iload 6 /* byteRate */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        16: .line 304
            aload 10 /* header */
            iload 7 /* blockAlign */
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        17: .line 305
            aload 10 /* header */
            iload 8 /* bitsPerSample */
            invokevirtual java.nio.ByteBuffer.putShort:(S)Ljava/nio/ByteBuffer;
            pop
        18: .line 306
            aload 10 /* header */
            iconst_4
            newarray 8
            dup
            iconst_0
            bipush 100
            bastore
            dup
            iconst_1
            bipush 97
            bastore
            dup
            iconst_2
            bipush 116
            bastore
            dup
            iconst_3
            bipush 97
            bastore
            invokevirtual java.nio.ByteBuffer.put:([B)Ljava/nio/ByteBuffer;
            pop
        19: .line 307
            aload 10 /* header */
            iload 4 /* dataLength */
            invokevirtual java.nio.ByteBuffer.putInt:(I)Ljava/nio/ByteBuffer;
            pop
        20: .line 308
            aload 10 /* header */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/Buffer;
            pop
        21: .line 310
            aload 10 /* header */
            areturn
        end local 10 // java.nio.ByteBuffer header
        end local 9 // byte[] headerBuf
        end local 8 // short bitsPerSample
        end local 7 // short blockAlign
        end local 6 // int byteRate
        end local 5 // int sampleSizeInBytes
        end local 4 // int dataLength
        end local 3 // int channelCount
        end local 2 // int audioFormat
        end local 1 // int sampleRateInHz
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   22     0               this  Landroid/speech/tts/FileSynthesisCallback;
            0   22     1     sampleRateInHz  I
            0   22     2        audioFormat  I
            0   22     3       channelCount  I
            0   22     4         dataLength  I
            1   22     5  sampleSizeInBytes  I
            2   22     6           byteRate  I
            3   22     7         blockAlign  S
            4   22     8      bitsPerSample  S
            5   22     9          headerBuf  [B
            6   22    10             header  Ljava/nio/ByteBuffer;
    MethodParameters:
                Name  Flags
      sampleRateInHz  
      audioFormat     
      channelCount    
      dataLength      

  public void rangeStart(int, int, int);
    descriptor: (III)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // android.speech.tts.FileSynthesisCallback this
        start local 1 // int markerInFrames
        start local 2 // int start
        start local 3 // int end
         0: .line 315
            aload 0 /* this */
            getfield android.speech.tts.FileSynthesisCallback.mDispatcher:Landroid/speech/tts/TextToSpeechService$UtteranceProgressDispatcher;
            iload 1 /* markerInFrames */
            iload 2 /* start */
            iload 3 /* end */
            invokeinterface android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher.dispatchOnRangeStart:(III)V
         1: .line 316
            return
        end local 3 // int end
        end local 2 // int start
        end local 1 // int markerInFrames
        end local 0 // android.speech.tts.FileSynthesisCallback this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Landroid/speech/tts/FileSynthesisCallback;
            0    2     1  markerInFrames  I
            0    2     2           start  I
            0    2     3             end  I
    MethodParameters:
                Name  Flags
      markerInFrames  
      start           
      end             
}
SourceFile: "FileSynthesisCallback.java"
InnerClasses:
  abstract UtteranceProgressDispatcher = android.speech.tts.TextToSpeechService$UtteranceProgressDispatcher of android.speech.tts.TextToSpeechService