Android. Запись голоса с микрофона

Android. Мне нужно записать звук (голос) с микрофона. Для этого я написал вот что

        voiceFile = File(
            requireContext().filesDir.absolutePath,
            "1.wav"
        )
        voiceFile.parentFile?.mkdirs()
        voiceFile.exists()

        try {
            voiceFile.createNewFile()
        } catch (e: IOException) {
            Timber.d("createNewFileException 2")
        }

Но файл не создается. Исключения тоже нету. Мистика. Android. Код записи:

val minInternalBufferSize = AudioRecord.getMinBufferSize(
    sampleRate,
    channelConfig, audioFormat
)
val internalBufferSize = minInternalBufferSize * 4

recorder = AudioRecord(MediaRecorder.AudioSource.MIC,
        sampleRate, channelConfig, audioFormat, internalBufferSize)
    recorder.startRecording()
    isRecording = true

val recordingThread = Thread({ writeAudioDataToFile(recorder, voiceFile) }, "AudioRecorder Thread")
        recordingThread.start()


private fun writeAudioDataToFile(recorder: AudioRecord, voiceFile: File) {
        // Write the output audio in byte
        val sData = ShortArray(bufferElements2Rec)
        var os: FileOutputStream? = null
        try {
            os = FileOutputStream(voiceFile)
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        }
        while (isRecording) {
            // gets the voice output from microphone to byte format
            recorder.read(sData, 0, bufferElements2Rec)
            println("Short writing to file$sData")
            try {
                // // writes the data to file from buffer
                // // stores the voice buffer
                val bData: ByteArray = short2byte(sData)
                os?.write(bData, 0, bufferElements2Rec * bytesPerElement)
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
        try {
            os?.close()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

Тут, для начала, должен создаваться файл (voiceFile.createNewFile()) но этого не происходит и ошибка не выбрасывается.


Ответы (1 шт):

Автор решения: Vasiliy K

Понял как создать файл и работать с ним:

FileOutputStream

Если файл не существует и не может быть создан, то будет брошена FileNotFoundException, но если возможность создания файла будет, то файл будет создан.

→ Ссылка