【问题标题】:How to play OGG data in AudioTrack如何在 AudioTrack 中播放 OGG 数据
【发布时间】:2021-10-07 10:12:05
【问题描述】:

我正在使用库 org.gagravarr:vorbis-java-core:0.8 (https://github.com/Gagravarr/VorbisJava)。

我想从 OGG 文件中获取 PCM 数据并使用 AudioTrack 播放它。使用 AudioTrack 对我来说是一项要求,因为我稍后需要在播放时连接多个 PCM 数据以获得最流畅的播放。

如下图所示,我尝试用与文件匹配的数据设置AudioTrack,用库读取文件内容,直接写入AudioTrack,结果播放时没有音频。

我检查了循环,并确定数据被正确读取。

AudioTrack track = new AudioTrack.Builder()
        .setAudioAttributes(new AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .build()
        )
        .setAudioFormat(new AudioFormat.Builder()
                .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                .setSampleRate(44100)
                .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
                .build()
        )
        .setPerformanceMode(AudioTrack.PERFORMANCE_MODE_LOW_LATENCY)
        .build();

FileInputStream fileInputStream = new FileInputStream(
        this.currentSong.getTrackFile("03")
);

OggFile oggFile = new OggFile(fileInputStream);
OggPacketReader oggPacketReader = oggFile.getPacketReader();

int written = 0;
while (true) {
    OggPacket oggPacket = oggPacketReader.getNextPacket();
    if (oggPacket == null) break;
    byte[] data = oggPacket.getData();
    track.write(data, written, data.length);
    written += data.length;
}
track.play();

以下是有关我正在尝试读取的文件的一些信息:

我什至为此使用了适当的库吗?我最近看到一个叫做 MediaCodec 的东西使用低级编解码器,但我不知道从哪里开始......

【问题讨论】:

    标签: java android audio android-mediacodec ogg


    【解决方案1】:

    目前,AudioTrack 不支持 Vorbis 格式。因此,您需要先将源音轨解码为原始 PCM,然后再将其输入AudioTrack

    这可以使用MediaExtractorMediaCodec(解码器)来完成。

    链接:

    https://developer.android.com/reference/android/media/MediaExtractor

    https://developer.android.com/reference/android/media/MediaCodec#asynchronous-processing-using-buffers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多