当前位置: 首页 > 知识库问答 >
问题:

传出呼叫录音音频文件没有声音

寇鸿
2023-03-14

录制完一个呼出的电话后,我试图播放录制的文件——以确保通话录音按预期工作(我使用“媒体播放器”进行),但没有声音。所以我试图访问手机上的实际文件(只需将手机连接到电脑上并访问它的文件)。当我播放录音时,它的长度是正确的,但同样没有声音。

我错过了什么?

这是我记录电话的方式:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

File callAudioFile = null;
try {
    File downloadsDir = context.getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
    callAudioFile = File.createTempFile("deTuCelRecord", ".amr", downloadsDir);
} catch (IOException e) {
    e.printStackTrace();
}
assert callAudioFile != null;
audioFilePath = callAudioFile.getAbsolutePath();

recorder.setOutputFile(audioFilePath);
try {
    recorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
        @Override
        public void onError(MediaRecorder mr, int what, int extra) {
            Log.e("MediaRecorder", "MediaRecorder error " + what + " " + extra);
        }
    });
    recorder.prepare();
} catch (IllegalStateException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

recorder.start();

这是结束通话记录的代码:

recorder.stop();
recorder.release();

这是我播放音频文件的方式:

MediaPlayer mPlayer = new MediaPlayer();
try {
    mPlayer.setDataSource(audioFilePath);
    mPlayer.prepare();
    Toast.makeText(getApplicationContext(), "PLAYING AUDIO", Toast.LENGTH_LONG).show();
    mPlayer.start();
    Log.d("PLAY_AUDIO", "Started playing audio");
} catch (IOException e) {
    Log.e("PLAY_AUDIO", "Failed to play audio");
}

共有2个答案

董鸣
2023-03-14

问题是android版本——从android 10开始,它不允许我记录通话,但在android 9上可以。

丁志勇
2023-03-14

请在测试手机中查看此辅助服务。

如果您正在尝试在Android Q上录制通话,请参阅此链接

您可以尝试使用录音机音频源(MediaRecorder.AudioSource.VOICE_CALL);它需要Manifest.permission.CAPTURE_AUDIO_OUTPUT许可。

请查阅AudioSource源文档,了解VOICE_CALL和VOICE_COMMUNICATION的区别

 类似资料:
  • 更新:任何人都知道如何强迫另一个流到麦克风音频源。这需要原生android代码。请在这方面帮助我,请参考这个问题,以获得更多关于路由音频的详细信息

  • 我试图让callkit在传入呼叫时与webrtc一起工作,但当我从锁定屏幕接收呼叫并接受它时,在我以前台模式运行应用程序之前,不会有声音。我已配置audiosession向RTCAudoSession发送通知,但它不起作用。你有解决办法吗?

  • 我正在开发一个VoIP应用程序,使用Twilio进行电话。我面临的问题是,如果AVAudioSession在呼叫进行中被中断,例如被传入的FaceTime呼叫中断,那么在中断结束后,我无法继续使用音频会话。电话没有断开,但听不到声音,麦克风也没有记录任何东西。 我已经注册了AVAudioSessionInterruptionNotification,并在通知处理程序中执行以下操作: 我没有得到任何

  • 我目前正在创建一个HTML5音乐编辑程序。我从录制音频开始。我想出了如何访问microphon等等。“recorder.js”中的代码帮了我很大的忙。 但我想创建一个临时AudioBuffer,而不是写入.wave文件。我从“OnAudioProcess”事件中的inputtbuffer中获取了Float32Array并将它们一起保存在一个Float32Array中。现在我有一个数组的值,让我们假

  • 我使用media Recorder library来记录语音通话,除了android Oreo8.0API level 27之外,它在几乎android版本中都工作得很好。当我使用音频源VOICE_CALL时,我得到了运行时异常启动失败,当我使用音频源VOICE_COMMUNICATION时,我没有得到对方的声音,我只得到了我的声音。 你能帮忙吗