JOAL学习笔记
如果将之前实例代码中的错误数量比作毛毛雨的话,笔者已经让本次课程的大暴雨淋成落汤鸡了……
由于本次课程中原文作者并未给出完整的代码片,也并未给出解码器的实现,因此我在这里把我已经调通的测试代码贴出来。
先贴出一张图,这样能让大家对整个实现的体系有所了解:
可以看出,我并没有选择教程建议的j-ogg.de提供的j-oggAPI,这个德国网站上并没有实例的讲解,仅仅提供了一个API文档,我参照这个文档(英文)写了一些测试代码,发现其内部报了一个数组越界错误,估计这套API应该是有Bug的。
除了这个原因外,选择Java Sound API作为解码器核心的另一个理由,是对于mp3、ogg等格式已经存在较为成熟的SPI组件,我们无需显示地调用使用哪种解码器,JavaSound会自动找到系统内支持解码的服务,这样对于不同格式的文件可以通用一套API。
最后贴代码之前,先把依赖项来源给出,这次的依赖项很多:
Jlayer:http://www.javazoom.net/javalayer/javalayer.html
mp3SPI:http://www.javazoom.net/mp3spi/mp3spi.html
oggvorbisSPI:http://www.javazoom.net/vorbisspi/vorbisspi.html
jorbis:http://www.jcraft.com/jorbis/ 这是oggSPI的依赖项
项目示意图:
jcraft的资源下载下来是没编译的,需要自己加入项目中,这点请注意。
源代码:
Main.java:
package com.thrblock.openal;
import com.jogamp.openal.ALFactory;
import com.jogamp.openal.util.ALut;
public class Main {
public static void main(String[] args) {
ALut.alutInit();
OggVorbisPlayer player = new OggVorbisPlayer(ALFactory.getAL(),"./oggData/ThorVariation.ogg");
//OggVorbisPlayer player = new OggVorbisPlayer(ALFactory.getAL(),".