【发布时间】: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