Java &引用;“样本框架”;在AudioInputStream的上下文中
我目前正在为Java声音SPI实现一个编解码器。我已经到了一个阶段,我将不得不改变的一些行为(因此必须覆盖它)。然而,“样本框架”的措辞对我来说没有任何意义。在我的编解码器中,样本数量和帧数量在数量和意义上都非常不同。那么在这个类的上下文中,它的含义是什么 例如,frameLength记录为“此流的长度,在示例帧中”。流的长度不等于流中的帧数 framePos被记录为“此流中的当前位置,在样本帧中(基于零)”,这是否意味着它保存流当前所在的帧或流所在的样本Java &引用;“样本框架”;在AudioInputStream的上下文中,java,audio,javasound,Java,Audio,Javasound,我目前正在为Java声音SPI实现一个编解码器。我已经到了一个阶段,我将不得不改变的一些行为(因此必须覆盖它)。然而,“样本框架”的措辞对我来说没有任何意义。在我的编解码器中,样本数量和帧数量在数量和意义上都非常不同。那么在这个类的上下文中,它的含义是什么 例如,frameLength记录为“此流的长度,在示例帧中”。流的长度不等于流中的帧数 framePos被记录为“此流中的当前位置,在样本帧中(基于零)”,这是否意味着它保存流当前所在的帧或流所在的样本 等。“采样帧”指在所有通道上包含单个采
等。“采样帧”指在所有通道上包含单个采样的帧。对于8位单声道,这是1个字节,对于16位立体声,这是4个字节(2个通道,每个样本2个字节)
AudioInputStream
从传递给构造函数的AudioFormat
中获取此大小
frameLength
和framePos
始终以该大小为单位
AudioInputStream
始终尝试读取完整数量的示例帧,这样应用程序代码就不必处理获取部分帧的问题 来自:
对于PCM之类的编码,帧由给定时间点上所有通道的样本集组成,因此帧的大小(以字节为单位)始终等于样本的大小(以字节为单位)乘以通道数。然而,对于一些其他类型的编码,一个帧可以包含一整系列样本的压缩数据包,以及额外的非样本数据。对于这种编码,采样率和采样大小是指解码到PCM后的数据,因此它们与帧速率和帧大小完全不同
因此,如果您的编解码器像mp3一样压缩音频,则帧更像是压缩的数据块,其大小与未压缩PCM编码中遇到的样本大小关系不大(可以找到有关mp3帧的更多信息)
因此,AudioInputStream
文档中的frameLength
实际上只是指该流中的总帧数
或者更清楚地说,在压缩音频的上下文中:压缩块的数量
当使用stream=AudioSystem.getAudioInputStream(文件)
读取压缩音频时,将返回一个压缩流以及一个适当的AudioFormat
实例。然后,用户需要使用类似于decompressedStream=AudioSystem.getAudioInputStream(PCM_SIGNED,stream)
的内容解压缩流
不幸的是,这常常被误解