android将麦克风录制到ByteArray并通过套接字流传输到服务器

vwkv1x7d  于 2022-12-21  发布在  Android
关注(0)|答案(1)|浏览(193)

我是kotlin和android应用程序的初学者。
我想连续录制语音,并通过套接字将语音数据传送到服务器。
我尝试了下面的代码,但服务器最终只接收 * AMR * 格式的数据。

val byteArrayOutputStream = ByteArrayOutputStream()

val descriptors = ParcelFileDescriptor.createPipe()
val parcelRead = ParcelFileDescriptor(descriptors[0])
val parcelWrite = ParcelFileDescriptor(descriptors[1])

val inputStream: InputStream = ParcelFileDescriptor.AutoCloseInputStream(parcelRead)

val recorder = MediaRecorder()
recorder.setAudioSource(MediaRecorder.AudioSource.MIC)
recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB)
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
recorder.setOutputFile(parcelWrite.fileDescriptor)
recorder.prepare()

recorder.start()

var read: Int
val data = ByteArray(16384)
while ((inputStream.read(data, 0, data.size).also { read = it } != -1)) {
    byteArrayOutputStream.write(data, 0, read)
}
byteArrayOutputStream.flush()

如何使用byteArrayOutputStream发送 * WAV * 格式的音频数据?是否可以使用上面的代码将采样率修改为48000?
谢谢你。

2exbekwf

2exbekwf1#

MediaRecorder.OutputFormat中列出的可用格式包括:

  1. AAC_ADTS
  2. AMR_注意事项
  3. AMR_WB
  4. MPEG_2_TS格式
  5. MPEG_4格式
    1.奥格
  6. RAW_AMR(已弃用)
    1.三个_GPP
  7. WEBM方法
    如果您坚持使用WAV格式,则可能必须使用mentioned here的音频数据对WAV文件进行编码。

相关问题