import com.google.android.exoplayer2.C; //导入方法依赖的package包/类

/**

* Peeks and returns a {@code WavHeader}.

*

* @param input Input stream to peek the WAV header from.

* @throws ParserException If the input file is an incorrect RIFF WAV.

* @throws IOException If peeking from the input fails.

* @throws InterruptedException If interrupted while peeking from input.

* @return A new {@code WavHeader} peeked from {@code input}, or null if the input is not a

* supported WAV format.

*/

public static WavHeader peek(ExtractorInput input) throws IOException, InterruptedException {

Assertions.checkNotNull(input);

// Allocate a scratch buffer large enough to store the format chunk.

ParsableByteArray scratch = new ParsableByteArray(16);

// Attempt to read the RIFF chunk.

ChunkHeader chunkHeader = ChunkHeader.peek(input, scratch);

if (chunkHeader.id != Util.getIntegerCodeForString("RIFF")) {

return null;

}

input.peekFully(scratch.data, 0, 4);

scratch.setPosition(0);

int riffFormat = scratch.readInt();

if (riffFormat != Util.getIntegerCodeForString("WAVE")) {

Log.e(TAG, "Unsupported RIFF format: " + riffFormat);

return null;

}

// Skip chunks until we find the format chunk.

chunkHeader = ChunkHeader.peek(input, scratch);

while (chunkHeader.id != Util.getIntegerCodeForString("fmt ")) {

input.advancePeekPosition((int) chunkHeader.size);

chunkHeader = ChunkHeader.peek(input, scratch);

}

Assertions.checkState(chunkHeader.size >= 16);

input.peekFully(scratch.data, 0, 16);

scratch.setPosition(0);

int type = scratch.readLittleEndianUnsignedShort();

int numChannels = scratch.readLittleEndianUnsignedShort();

int sampleRateHz = scratch.readLittleEndianUnsignedIntToInt();

int averageBytesPerSecond = scratch.readLittleEndianUnsignedIntToInt();

int blockAlignment = scratch.readLittleEndianUnsignedShort();

int bitsPerSample = scratch.readLittleEndianUnsignedShort();

int expectedBlockAlignment = numChannels * bitsPerSample / 8;

if (blockAlignment != expectedBlockAlignment) {

throw new ParserException("Expected block alignment: " + expectedBlockAlignment + "; got: "

+ blockAlignment);

}

@C.PcmEncoding int encoding = Util.getPcmEncoding(bitsPerSample);

if (encoding == C.ENCODING_INVALID) {

Log.e(TAG, "Unsupported WAV bit depth: " + bitsPerSample);

return null;

}

if (type != TYPE_PCM && type != TYPE_WAVE_FORMAT_EXTENSIBLE) {

Log.e(TAG, "Unsupported WAV format type: " + type);

return null;

}

// If present, skip extensionSize, validBitsPerSample, channelMask, subFormatGuid, ...

input.advancePeekPosition((int) chunkHeader.size - 16);

return new WavHeader(numChannels, sampleRateHz, averageBytesPerSecond, blockAlignment,

bitsPerSample, encoding);

}

pcm压缩 java,Java C.PcmEncoding方法代码示例相关推荐

  1. java kryo_Kryo框架使用方法代码示例

    Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,进入此页面,然后点击右边的Download Zip按钮,就能下载到最新版本的Kryo ...

  2. java readtimeout_Java HttpURLConnection.getReadTimeout方法代码示例

    import java.net.HttpURLConnection; //导入方法依赖的package包/类 /** * 得到响应对象 * * @param urlConnection * @retu ...

  3. java invalidate_Java Component.invalidate方法代码示例

    import java.awt.Component; //导入方法依赖的package包/类 /** Installs the component we will embed to display t ...

  4. java hasmoreelements_Java IOException.hasMoreElements方法代码示例

    import java.io.IOException; //导入方法依赖的package包/类 /** * fileName���� ���� package �������� ������ ���� ...

  5. java methode_Java Method.getTypeParameters方法代码示例

    import java.lang.reflect.Method; //导入方法依赖的package包/类 private void validateRuleMethod(MethodRuleDefin ...

  6. java setmethod_Java Operation.setJavaMethod方法代码示例

    import com.sun.tools.internal.ws.processor.model.Operation; //导入方法依赖的package包/类 private void createJ ...

  7. java cancel_Java RunnableFuture.cancel方法代码示例

    import java.util.concurrent.RunnableFuture; //导入方法依赖的package包/类 @Test public void testSnapshotAsyncC ...

  8. java getevent_Java ActionEvent.getWhen方法代码示例

    import java.awt.event.ActionEvent; //导入方法依赖的package包/类 @Override final public void actionPerformed(A ...

  9. java deepcopy_Java JsonNode.deepCopy方法代码示例

    import com.fasterxml.jackson.databind.JsonNode; //导入方法依赖的package包/类 /** * Applies this schema rule t ...

最新文章

  1. 以下用于数据存储领域的python第三方库是-Python3爬虫学习之MySQL数据库存储爬取的信息详解...
  2. 自定义获取html元素对象的7种方法。
  3. 零 目录-机器学习老师板书-斯坦福吴恩达教授
  4. 从CES 2017看今年智能汽车发展趋势之三:智能座舱异军突起
  5. Cocos 实用渲染实战(一):高性价比的人物皮肤渲染
  6. python模块安装(xgboost)
  7. Python学习_字符串格式化
  8. 93. Restore IP Addresses 1
  9. android 键盘点击事件监听事件,Android 键盘事件触发以及监听
  10. Linux zip命令:压缩文件或目录
  11. SSL自签名的实现类org apache commons httpclient contrib ssl EasySSLP
  12. Java集合继承关系图
  13. Java—读取指定路径下文件的内容
  14. NFS PRC端口映射器
  15. 【程序人生】Web前端工程师岗位分析报告
  16. 测试鼠标手速的软件,APMTrainer
  17. 计算机扫描服务开启,win7系统,电脑打印机右键中无扫描选项(WIA已启动)
  18. 小米电视机如何重新匹配遥控器
  19. SPARC Learn Note
  20. Ambarella SDK build 步骤解析

热门文章

  1. 控制usb扫码枪_无线也可以很牢靠-世达SATA热熔胶枪评测
  2. 计算机数值计算的相关文章,数值计算论文.doc
  3. 微信整人假红包图片_警惕:千万别点!这些红包是假的
  4. std::map的insert和下标[]访问
  5. DateTime时间的比较问题
  6. 前端vscode插件合集
  7. [react] 如何更新组件的状态?
  8. [html] 如何在网页中嵌入公司地址的地图?
  9. [css] 你会经常用到伪元素吗?一般都用在哪方面?
  10. [vue-element] ElementUI是怎么做表单验证的?在循环里对每个input验证怎么做呢?