录制音频时如何静音麦克风

3

我目前正在开发一个应用程序,它可以在后台运行,并在来电和去电期间将麦克风静音。但是,当有任何类型的音频录制时,我无法将麦克风静音。如果能提供任何解决方案,将会非常有帮助。

提前感谢。


你在静音时是否遇到任何错误或异常? - Praful Bhatnagar
请参考以下链接:https://dev59.com/LWw15IYBdhLWcg3wCXOJ其中有对您有帮助的资料。 - user1249380
没有任何错误提示。 - sumon chatterjee
4个回答

0

AudioRecorder没有直接的静音方法。我们需要添加一些技巧来静音录音。

我可以做的是,下载无声wav文件并将其转换为字节,然后添加到字节数组中。 当用户点击静音按钮时,isMuteClick = true,取消静音时为false。

while (isStreaming) 
                {
                    if(!isMuteClick){
                        // read() is a blocking call // can set blocking see docs
                        int bytesRead = recorder.read(readBuffer, 0,bytesReadTotal); 
                    
                        bytesReadTotal += bytesRead; // above ...chunk - bytesReadTotal);
                        mainBuffer.write(readBuffer, 0, bytesRead);
                       
                    }else{
                        int bytesRead = recorder.read(WavToByteArray(R.raw.silence), 0, chunk - bytesReadTotal); // 505  // 4410 //chunk - bytesReadTotal
                       
                        bytesReadTotal += bytesRead; // above ...chunk - bytesReadTotal);
                        mainBuffer.write(WavToByteArray(R.raw.silence), 0, bytesRead);
                    }
                } /

以下是将无声WAV文件转换为字节数组的代码

private byte[] WavToByteArray(int resourceId) {
    byte[] filteredByteArray = new byte[1024];
    try {
        InputStream inputStream = this.getResources().openRawResource(resourceId);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] soundBytes = new byte[1024];

        int i = Integer.MAX_VALUE;
        while ((i = inputStream.read(soundBytes, 0, soundBytes.length)) > 0) {
            outputStream.write(soundBytes, 0, i);
        }

        inputStream.close();
        outputStream.close();

        // remove  .wav header
        byte[] audioBytes = outputStream.toByteArray();
        filteredByteArray = Arrays.copyOfRange(audioBytes, 44, audioBytes.length);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return filteredByteArray;
}

0
如果您不想在视频录制时记录音频,您可以设置:
AudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
在某些设备上,也可以使用 AudioManager.STREAM_SYSTEM。

0
我猜你在谈论一个安卓应用,但你的问题应该更加明确才行。不过,这篇文章是关于如何静音麦克风的,应该可以回答你的问题。 setMicrophoneMute()是如何工作的?

setMicrophoneMute根本不起作用..它只适用于语音通话。 - sumon chatterjee

0

AudioManager::setMicrophoneMute 仅适用于语音通话(和VoIP)。在某些产品上,它可能也会影响录音,但不能保证它会这样做,因此您不能依赖它。

它仍然应该静音语音通话上行,以便其他一方无法听到您正在说什么,即使有正在进行的录音。如果没有,我会认为这是您测试设备实现中的一个错误。但是,您所说的内容最终将出现在您本地进行的录音中(除非您使用VOICE_DOWNLINK AudioSource)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接