【问题标题】:PCM Raw Bytes [] To Audio on AndroidPCM Raw Bytes [] 到 Android 上的音频
【发布时间】:2012-07-01 08:00:12
【问题描述】:

我目前有一个字节数组形式的 PCM 音频。格式为 16 位 little endian。我想将其转换为 Android 上的一些可播放格式,最好是 3.2 或更高版本。有人对如何做到这一点有建议吗?我做了一些研究并尝试了以下方法,但没有一个成功。如果有人能提出更好的方法或指出我哪里出错了,将不胜感激。

我尝试使用正确的音频设置创建 AudioFormat,但是 Android 不支持 javax.sound.sampled 库。

我也尝试将 PCM 数据写入波形文件,但在获取所有必要的 wav 标头信息时遇到了麻烦。

我也尝试过使用 Android 提供的 AudioTrack 类来播放 PCM 数据。然而,我似乎听不到任何声音。这是我的方法:

    public void playback(){
         try{
              AudioTrack audioTrack = new  AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 500000, AudioTrack.MODE_STATIC);
              audioTrack.write(audio, 0, 500000);

      } catch(Throwable t){
        Log.d("Audio","Playback Failed");
    }
}

任何建议将不胜感激。

【问题讨论】:

    标签: android audio bytearray pcm audiotrack


    【解决方案1】:

    问题是您是想直接在 Android 应用中播放从某个来源收到的 PCM 样本,还是如果您有一些需要转换的外部文件。在第一种情况下,按照 jack57 所描述的方式进行。这真的很简单,您甚至可以添加标记来精确计时。

    int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
    
    AudioTrack mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
    
    mAudioTrack.play();
    

    然后循环调用write方法:

    mAudioTrack.write(buffer, 0, buffer.length);
    

    在第二种情况下,只需使用一些免费的音频编辑器:http://audacity.sourceforge.net/download/。您可以将 PCM 样本存储为 .txt 文件,在编辑器中打开它并以您需要的格式保存...

    【讨论】:

      【解决方案2】:

      http://developer.android.com/reference/android/media/AudioTrack.html

      这个类看起来正是你所需要的!

      write(byte[] audioData, int offsetInBytes, int sizeInBytes)
      

      将音频数据写入音频硬件进行播放。

      编辑

      将您的信息流更改为AudioManager.STREAM_MUSIC

      【讨论】:

      • 感谢您指导我修复流。这有助于修复错误。
      • 请选择一个正确的答案,它将帮助您以后获得更多答案。
      • 我们可以把它写在一个文件中并存储它吗?
      • 这怎么能写入文件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      相关资源
      最近更新 更多