jmp123.decoder
类 AbstractLayer

java.lang.Object
  继承者 jmp123.decoder.AbstractLayer
直接已知子类:
Layer1, Layer2, Layer3

public abstract class AbstractLayer
extends java.lang.Object

解码1帧MPEG-1/MPEG-2/MPEG-2.5 Audio LayerⅠ/Ⅱ/Ⅲ 并完成音频输出。

源码下载: http://jmp123.sf.net/

版本:
0.400

构造方法摘要
AbstractLayer(Header h, IAudio audio)
          用指定帧头h和音频输出audio对象创建一个帧解码器。
 
方法摘要
protected  void close(boolean interrupted)
          结束音乐数据解码,并将PCM缓冲区指针复位。
abstract  int decodeAudioData(byte[] b, int off)
          从此缓冲区b中给定偏移量off处开始解码一帧(除帧头外的)音乐数据。
protected  void initialize()
          初始化。
protected  boolean isEndOfBuffer(int ch)
          是否到达PCM缓冲区末尾。
protected  int outputPCM()
          尝试输出解码结果。
protected  boolean startAudio()
          开始或停止音频输出。
protected  boolean started()
          获取音频输出状态。
protected  void synthesisSubBand(float[] samples, int ch)
          一个子带多相合成滤滤。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

AbstractLayer

public AbstractLayer(Header h,
                     IAudio audio)
用指定帧头h和音频输出audio对象创建一个帧解码器。

参数:
h - 已经解码帧头信息的帧头对象。
audio - 音频输出对象。如果指定为 null 则调用 outputPCM() 不产生输出,仅移动PCM缓冲区指针(表示缓冲区已经取走,可重新写入数据)。
方法详细信息

decodeAudioData

public abstract int decodeAudioData(byte[] b,
                                    int off)
从此缓冲区b中给定偏移量off处开始解码一帧(除帧头外的)音乐数据。

参数:
b - 源数据缓冲区。
off - 源数据缓冲区的偏移量。
返回:
源数据缓冲区新的偏移量,用于计算解码下一帧数据的开始位置在源数据缓冲区的偏移量。

synthesisSubBand

protected final void synthesisSubBand(float[] samples,
                                      int ch)
一个子带多相合成滤滤。

参数:
samples - 输入的32个样本值。
ch - 当前声道。0表示左声道,1表示右声道。

isEndOfBuffer

protected final boolean isEndOfBuffer(int ch)
是否到达PCM缓冲区末尾。如果到达缓冲区末尾,在缓冲区清空或者取走部分数据之前不能写入。

参数:
ch - 声道。0表示左声道,1表示右声道。
返回:
返回true表示到达缓冲区末尾,否则返回false

initialize

protected void initialize()
初始化。

本方法会被解码器在执行解码循环前调用,若子类需要完成某些特定的初始化,重载本方法。


outputPCM

protected int outputPCM()
尝试输出解码结果。

多相合成滤波输出的PCM数据写入缓冲区,当缓冲区至少填入解码4帧得到的PCM数据才产生一次输出, 但调用者并不需要知道当前缓冲区是否已经填入足够数据。 防止缓冲区溢出,每解码最多4帧应调用本方法1次, 当然也可以每解码1帧就调用本方法1次。

若产生音频输出将,将从缓冲区取走解码4帧得到的PCM数据。

可能产生阻塞:若音频输出已经停止,对本方法的调用将被阻塞,直到开始音频输出。如果输入流解码完,阻塞被自动清除。

另请参见:
startAudio()

startAudio

protected boolean startAudio()
开始或停止音频输出。

返回:
开始音频输出返回 true,否则返回 false

started

protected final boolean started()
获取音频输出状态。

返回:
已经开始音频输出返回true,若已停止音频输出则返回false

close

protected void close(boolean interrupted)
结束音乐数据解码,并将PCM缓冲区指针复位。如果因为音频输出已经停止而调用 outputPCM() 被阻塞,阻塞将被清除。

参数:
interrupted - 是否需要以立即方式关闭。若为 false,等待音频输出缓冲区的全部内容刷向音频输出对象后返回;若为 true 以立即方式返回。