我正在尝试使用Android录制上行和下行语音。不论法律和所有方面,我都已经知道,所以请不要发表与法律有关的评论。
下面的代码可以正常工作,除了当我使麦克风静音时,它不会记录下行语音。
我正在使用Android 8.1。我曾尝试在同一台设备上使用名为ACR的第三方应用程序,它运行良好,尽管我被静音了,但它仍会记录下行语音。
val audioManager = applicationContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val maximumVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL)
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, maximumVolume, 0)
val audioSource = MediaRecorder.AudioSource.MIC
val mediaRecorder = MediaRecorder()
mediaRecorder.apply {
setAudioSource(audioSource)
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
setAudioChannels(audioChannels)
setAudioSamplingRate(audioSamplingRate)
setAudioEncodingBitRate(audioEncodingBitRate)
setOutputFile(path)
prepare()
start()
答案 0 :(得分:0)
这不是问题。您将MediaRecorder设置为使用MIC作为输入,因此,如果将麦克风静音,则显然输入信号丢失/静音。当您使用“下行”字时,我希望看到其他输入源为VOICECALL或DOWNLINK,而不是MIC。尝试使用MIC录制语音呼叫是错误的,因为:(1)您必须设置扬声器的最大音量并通过它重定向语音呼叫(2)在从MIC录制语音呼叫的同时,呼叫者会听到所有发生的声音您的设备以及您对他人说的所有话(3)这种方法记录了很多噪音和回声。正确的方法是从VOICECALL进行录制,但是大多数新设备(使用较新的Android版本)禁止从该来源进行录制,并且仅允许在System Apps中进行录制。 ACR通过调用隐藏的API方法来使用变通方法,但是由于Android更新,该方法可能随时停止停止工作。