public final class AudioBuffer
extends java.lang.Object
音频录制模块在录音时会以稳定的速率持续产生录音数据,但其使用者可能无法保证以 线性速率对录音数据进行消费,此时就会因消费不及时导致录音数据丢失。音频缓存可 以通过缓存数据来避免这种情况的发生。
内部实现是一个 byte[] 环形缓冲区。
目前支持的功能
flush(),可一次性清空缓存close(),关闭后,所有处于阻塞中的操作将返回IAudioBufferHandler.onDataPut(int, long)IAudioBufferHandler.onDataGet(int, long)IAudioBufferHandler.onBufferEmpty()IAudioBufferHandler.onBufferFull()IAudioBufferHandler.onPutPaused(boolean)IAudioBufferHandler.onGetPaused(boolean)IAudioBufferHandler.onClosed()| 限定符和类型 | 字段和说明 |
|---|---|
int |
bufferTime
缓冲区长度,以时间为计量单位,单位:ms
|
int |
channels
声音通道数量
|
int |
sampleBits
采样位数,可以为 8, 16, 24, 32
|
int |
sampleBytes
一个采样的字节数
|
int |
sampleRate
采样率。
|
| 构造器和说明 |
|---|
AudioBuffer(int channels,
int sampleRate,
int sampleBits,
int bufferTime,
IAudioBufferHandler handler)
构造函数
|
| 限定符和类型 | 方法和说明 |
|---|---|
long |
bytesGet()
已读取字节总数
|
long |
bytesPut()
已写入字节总数
|
void |
close()
关闭缓冲区。
|
void |
flush()
清空缓冲区
|
int |
getData(byte[] data,
int milliseconds)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,则进行等待
|
int |
getData(byte[] data,
int offset,
int milliseconds)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,则进行等待
|
int |
getData(byte[] data,
int offset,
int length,
int milliseconds)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,则进行等待
|
int |
getDataNB(byte[] data)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,不进行等待
|
int |
getDataNB(byte[] data,
int offset)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,不进行等待
|
int |
getDataNB(byte[] data,
int offset,
int length)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,不进行等待
|
boolean |
isClosed()
缓冲区是否已关闭
|
boolean |
isEmpty()
缓冲区是否为空
|
boolean |
isFull()
缓冲区是否已满
|
boolean |
isGetPaused() |
boolean |
isPutPaused() |
int |
length()
缓冲区内数据长度(字节数量)
|
void |
pauseGet()
挂起数据读取(消费),挂起后 getData 会读不到数据,即使缓冲区内有数据
|
void |
pausePut()
挂起写入操作(生产),挂起后 putData() 会无法写入数据,即使有足够的空间
|
boolean |
putData(byte[] data,
int milliseconds)
生产者向 AudioBuffer 内写入数据,若因写入挂起或空间不够时,则进行等待
|
boolean |
putData(byte[] data,
int offset,
int milliseconds)
生产者向 AudioBuffer 内写入数据,若因写入挂起或空间不够时,则进行等待
|
boolean |
putData(byte[] data,
int offset,
int length,
int milliseconds)
生产者向 AudioBuffer 内写入数据,若因写入挂起或空间不够时,则进行等待
|
boolean |
putDataNB(byte[] data)
生产者向 AudioBuffer 内写入数据,若空间不足或写入被挂起,不进行等待
|
boolean |
putDataNB(byte[] data,
int offset)
生产者向 AudioBuffer 内写入数据,若空间不足或写入被挂起,不进行等待
|
boolean |
putDataNB(byte[] data,
int offset,
int length)
生产者向 AudioBuffer 内写入数据,若空间不足或写入被挂起,不进行等待
|
void |
resumeGet()
取消数据读取挂起(允许继续消费)
|
void |
resumePut()
取消数据写入挂起(允许继续生产)
|
int |
timeLength()
缓冲数据时长,单位: ms
|
public final int sampleBits
采样位数,可以为 8, 16, 24, 32
public final int channels
声音通道数量
public final int sampleRate
采样率。支持 11025, 22050, 44100 及其他为1000整数倍的采样率
public final int bufferTime
缓冲区长度,以时间为计量单位,单位:ms
public final int sampleBytes
一个采样的字节数
public AudioBuffer(int channels,
int sampleRate,
int sampleBits,
int bufferTime,
IAudioBufferHandler handler)
构造函数
channels - 声道数量sampleRate - 采样率sampleBits - 采样位数,可以为 8, 16, 24, 32bufferTime - 缓冲区长度,单位: ms,最小为 100ms,最长为 60shandler - 缓冲区事件回调接口,不能为 nullpublic long bytesPut()
已写入字节总数
public long bytesGet()
已读取字节总数
public void close()
关闭缓冲区。
关闭后,缓冲区将不能被继续使用。
public boolean isClosed()
缓冲区是否已关闭
public boolean isEmpty()
缓冲区是否为空
public boolean isFull()
缓冲区是否已满
public int length()
缓冲区内数据长度(字节数量)
public int timeLength()
缓冲数据时长,单位: ms
public boolean putDataNB(byte[] data)
生产者向 AudioBuffer 内写入数据,若空间不足或写入被挂起,不进行等待
data - 音频数据public boolean putDataNB(byte[] data,
int offset)
生产者向 AudioBuffer 内写入数据,若空间不足或写入被挂起,不进行等待
data - 音频数据offset - 写入 data 中的部分数据,起始位置为 offset,结束位置为 data 结尾public boolean putDataNB(byte[] data,
int offset,
int length)
生产者向 AudioBuffer 内写入数据,若空间不足或写入被挂起,不进行等待
data - 音频数据offset - 写入 data 中的部分数据,起始位置为 offsetlength - 要写入数据的长度public boolean putData(byte[] data,
int milliseconds)
生产者向 AudioBuffer 内写入数据,若因写入挂起或空间不够时,则进行等待
data - 音频数据milliseconds - 等待的时间。传入 -1 表示一直等待,直到可以完成写入public boolean putData(byte[] data,
int offset,
int milliseconds)
生产者向 AudioBuffer 内写入数据,若因写入挂起或空间不够时,则进行等待
data - 音频数据offset - 写入 data 中的部分数据,起始位置为 offset,结束位置为 data 结尾milliseconds - 等待的时间。传入 -1 表示一直等待,直到可以完成写入public boolean putData(byte[] data,
int offset,
int length,
int milliseconds)
生产者向 AudioBuffer 内写入数据,若因写入挂起或空间不够时,则进行等待
data - 音频数据offset - 写入 data 中的部分数据,起始位置为 offsetlength - 要写入数据的长度milliseconds - 等待的时间。传入 -1 表示一直等待,直到可以完成写入public int getDataNB(byte[] data)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,不进行等待
data - 音频数据,用来保存读取的数据。写入区间 [0, data.length)public int getDataNB(byte[] data,
int offset)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,不进行等待
data - 音频数据,用来保存读取的数据。写入区间 [offset, data.length)offset - 在 data 内的写入区间起始位置public int getDataNB(byte[] data,
int offset,
int length)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,不进行等待
data - 音频数据,用来保存读取的数据。写入区间 [offset, offset + length)offset - 在 data 内的写入区间起始位置length - 待读取的长度public int getData(byte[] data,
int milliseconds)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,则进行等待
data - 音频数据,用来保存读取的数据。写入区间 [0, data.length)milliseconds - 等待的时间。传入 -1 表示一直等待,直到可以完成读取public int getData(byte[] data,
int offset,
int milliseconds)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,则进行等待
data - 音频数据,用来保存读取的数据。写入区间 [offset, data.length)offset - 在 data 内的写入区间起始位置milliseconds - 等待的时间。传入 -1 表示一直等待,直到可以完成读取public int getData(byte[] data,
int offset,
int length,
int milliseconds)
消费者从 AudioBuffer 中读取数据,若缓冲区空或者读取被挂起,则进行等待
data - 音频数据,用来保存读取的数据。写入区间 [offset, offset + length)offset - 在 data 内的写入区间起始位置length - 待读取的长度milliseconds - 等待的时间。传入 -1 表示一直等待,直到可以完成读取public void flush()
清空缓冲区
public void pauseGet()
挂起数据读取(消费),挂起后 getData 会读不到数据,即使缓冲区内有数据
public void resumeGet()
取消数据读取挂起(允许继续消费)
public boolean isGetPaused()
public void pausePut()
挂起写入操作(生产),挂起后 putData() 会无法写入数据,即使有足够的空间
public void resumePut()
取消数据写入挂起(允许继续生产)
public boolean isPutPaused()