【问题标题】:Unable to play recorded raw PCM from file无法从文件播放录制的原始 PCM
【发布时间】:2023-03-30 01:40:01
【问题描述】:

我已将录制的音频原始 PCM 保存到文件 rxrawpcm.pcm 中,之后我尝试播放 pcm 文件但无法播放录制的 PCM?我没有听到录制的声音,只听到嗡嗡声

配置

AudioRecorder 和 AudioTrack 配置

Stream Type     :STREAM_VOICE_CALL
Sample Rate     : 8000
Audio Format    :PCM_16BIT
MODE        :MODE_STREAM
Channel Config  :CHANNEL_CONFIGURATION_MONO

录音

byte[] buffer=new byte[1600];
int read = audioRecord.read(buffer, 0,buffer.length);
if(recordAudio){
if(out!=null){
out.write(buffer);
}

玩家端

FileInputStream fis=new FileInputStream(rxFile);
byte[] buffer=new byte[1600];

while(fis.read(buffer)!=-1){
audioPlayer.write(buffer, 0, buffer.length);
}

【问题讨论】:

  • 您需要确保采样率、位深度、通道数(通常是单声道/交错立体声)和字节序一致才能播放数据。
  • 嗨,你能再看看我的问题吗

标签: android


【解决方案1】:

您的缓冲区大小可能太小。您应该使用 getMinBufferSize 方法来确定不会导致缓冲区溢出的最小缓冲区大小。此问题Android AudioRecord class - process live mic audio quickly, set up callback function 中票数最高的答案演示了如何使用适当的缓冲区大小正确设置音频录制。

【讨论】:

  • 实际上我可以播放音频循环播放。但只有从文件播放时才会给我带来麻烦。我已将缓冲区大小设置为 8320。
  • 看起来您正在写入整个读取缓冲区,而您应该使用读取计数仅写入您已读取的字节数。 out.write(buffer, 0, read);
  • 这是一个简单的任务,但我不知道为什么我没有得到正确的输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多