public void record()

in react-native-pytorch-core/android/src/main/java/org/pytorch/rn/core/audio/AudioModule.java [46:101]


  public void record(final int length, final Promise promise) {
    Log.d(NAME, "started recording");

    requestMicrophonePermission();

    final int recordingLength = SAMPLE_RATE * length;
    Thread recordingThread =
        new Thread(
            () -> {
              try {
                final int bufferSize =
                    AudioRecord.getMinBufferSize(
                        SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
                final AudioRecord record =
                    new AudioRecord(
                        MediaRecorder.AudioSource.DEFAULT,
                        SAMPLE_RATE,
                        AudioFormat.CHANNEL_IN_MONO,
                        AudioFormat.ENCODING_PCM_16BIT,
                        bufferSize);

                if (record.getState() != AudioRecord.STATE_INITIALIZED) {
                  Log.e(NAME, "Audio Record can't initialize!");
                  return;
                }
                record.startRecording();

                long shortsRead = 0;
                int audioDataOffset = 0;
                int shortsToCopy = 0;
                short[] audioBuffer = new short[bufferSize / 2];
                short[] audioData = new short[recordingLength];

                while (shortsRead < recordingLength) {
                  int numberOfShort = record.read(audioBuffer, 0, audioBuffer.length);
                  shortsRead += numberOfShort;
                  shortsToCopy = Math.min(numberOfShort, recordingLength - audioDataOffset);
                  System.arraycopy(audioBuffer, 0, audioData, audioDataOffset, shortsToCopy);
                  audioDataOffset += shortsToCopy;
                  Log.d(NAME, String.format("shortsRead=%d", shortsRead));
                }

                record.stop();
                record.release();

                Audio audio = new Audio(audioData);
                JSContext.NativeJSRef ref = JSContext.wrapObject(audio);
                promise.resolve(ref.getJSRef());
              } catch (Exception e) {
                Log.e(NAME, "Error recording audio:", e);
                promise.reject(e);
              }
            });

    recordingThread.start();
  }