我正在使用图书馆 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 的东西来使用低级编解码器,但我不知道从哪里开始......