jmp123.decoder
类 AbstractDecoder

java.lang.Object
  继承者 jmp123.decoder.AbstractDecoder
直接已知子类:
MiniPlayer

public abstract class AbstractDecoder
extends java.lang.Object

轻量级解码器。

AbstractDecoder的 id3v1()id3v2()vbr(Header)done()cooperate() 方法内部什么也没做,要执行相应的具体功能,须在子类中重载实现。 AbstractDecoder 定义这些方法,是为了保证这些方法在适当的时候被解码器调用。

版本:
0.400

构造方法摘要
AbstractDecoder(IAudio audio)
          用指定的音频输出audio创建一个AbstractDecoder对象。
 
方法摘要
protected  boolean cooperate()
          解码器协作事务处理。
protected  int copy(byte[] b, int off, int len)
          从解码器内部的缓冲区复制数据到b。
protected  void done()
          解码结束时被解码器自动调用。
protected abstract  int fillBuffer(byte[] b, int off, int len)
          填充数据到目标冲区b。
 int getFrameCount()
          获取当前帧序号。
protected  void id3v1()
          解析 ID3 tag v1.
protected  void id3v2()
          解析 ID3 tag v2.
 boolean isPaused()
          获取解码器状态。
protected  java.lang.String openDecoder()
          初始化解码器。
 boolean pause()
          暂停或继续解码。
protected  int read(byte[] b, int off, int len)
          从解码器内部的缓冲区读取数据到b。
 void run()
          开始解码,直至到达流的结尾或被用户终止。
protected  void vbr(Header h)
          解析 VBR 信息。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

AbstractDecoder

public AbstractDecoder(IAudio audio)
用指定的音频输出audio创建一个AbstractDecoder对象。

参数:
audio - 音频输出对象。若为 null,解码但不产生输出。
方法详细信息

run

public final void run()
开始解码,直至到达流的结尾或被用户终止。

如果解码过程中被用户终止,将以立即方式结束音乐数据解码。

另请参见:
AbstractLayer.close(boolean)

pause

public final boolean pause()
暂停或继续解码。这相当于一个单稳态的触发开关,第一次调用该方法暂停解码,第二次调用继续解码,以此类推。

返回:
当前状态。若为true表示解码器已经暂停,否则表示解码器正在解码。

isPaused

public final boolean isPaused()
获取解码器状态。

返回:
若已暂停返回true,否则返回false

getFrameCount

public final int getFrameCount()
获取当前帧序号。

返回:
当前帧序号。

openDecoder

protected final java.lang.String openDecoder()
初始化解码器。

返回:
帧头的简短信息。

fillBuffer

protected abstract int fillBuffer(byte[] b,
                                  int off,
                                  int len)
填充数据到目标冲区b。解码器内部有一个缓冲区,解码器会在需要的时候调用本方法向其填充数据。

参数:
b - 接收数据的目标缓冲区,其实就是解码器内部的一个缓冲区。
off - 目标缓冲区的偏移量。
len - 填充数据的长度。
返回:
实际填充数据的长度。

id3v1

protected void id3v1()
解析 ID3 tag v1.


id3v2

protected void id3v2()
解析 ID3 tag v2.


vbr

protected void vbr(Header h)
解析 VBR 信息。

参数:
h - 帧头对象,该帧头对象已经被解码器正确初始化。该方法被调用时表明解码器已经成功定位到第一帧并且完成了帧头解码。

cooperate

protected boolean cooperate()
解码器协作事务处理。cooperate 方法会在 run 方法内每解码一帧后被调用一次,子类重载cooperate方法用于处理解码过程中的其它事务。

返回:
返回值能够控制 run 方法的执行流程。如果返回值为 truerun 循环解码下一帧,如果返回值为 false 则退出循环结束解码过程。

done

protected void done()
解码结束时被解码器自动调用。


copy

protected final int copy(byte[] b,
                         int off,
                         int len)
从解码器内部的缓冲区复制数据到b。复制数据后不会移动缓冲区指针。

参数:
b - 接收数据的目标缓冲区。
off - 目标缓冲区的偏移量。
len - 复制数据的长度。
返回:
实际复制数据的长度,不超过源数据缓冲区的长度。

read

protected final int read(byte[] b,
                         int off,
                         int len)
从解码器内部的缓冲区读取数据到b。

参数:
b - 接收数据的目标缓冲区。
off - 目标缓冲区的偏移量。
len - 复制数据的长度,可超过源数据缓冲区的长度。
返回:
实际复制数据的长度。如果到达流的末尾或者发生I/O错误都将导致返回值小于len。