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, но если возможность создания файла будет, то файл будет создан.