如何在 AudioTrack 中播放 OGG 数据

时间:2021-08-01 23:33:17

标签: java android audio android-mediacodec ogg

我正在使用图书馆 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();

这里是关于我正在尝试阅读的文件的一些信息: Information about the read file

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

0 个答案:

没有答案