我正在尝试处理Android ExoPlayer中的音频缓冲区。在writeBuffer类的DefaultAudioSink函数中,音频数据将出现在ByteBuffer对象中。在我的例子中,我希望从这个Byte[]中获取值(如果可能的话),以处理以前的数据,以创建一个新的ByteBuffer,并将其交给audioTrack。
我首先尝试在一个新的ByteBuffer中克隆原始的ByteBuffer,然后将它发送到audioTrack (如ByteBuffer的深拷贝复制()中所描述的),以验证它是否仍然有效。但结果是目标和原始缓冲区的缓冲区为空(与此解决方案一样)。
public static ByteBuffer clone(ByteBuffer original) {
ByteBuffer clone = ByteBuffer.allocate(original.capacity());
original.rewind();//copy from the beginning
clone.put(original);
original.rewind();
clone.flip();
return clone;
}或者类似于加速音频(如果我删除倒带调用)。
一个简单的
ByteBuffer newBuffer = buffer.duplicate();也有同样的行为。
我试图理解为什么我不能得到一个工作的复制音频ByteBuffer,我可以传输到AudioTrack,并听到相同的声音。
发布于 2018-01-25 17:35:28
您是否尝试过复制和包装返回的ByteBuffer数组?即
byte[] copy = Arrays.copyOf(original.array(), original.array().length)
return ByteBuffer.wrap(copy, 0, copy.length)https://stackoverflow.com/questions/48447067
复制相似问题