理解AudioFormat,AudioInputStream和start方法的构造函数

我曾尝试编写播放声音文件的程序但到目前为止都没有成功。 我无法理解代码的某些部分:

InputStream is = new FileInputStream("sound file"); AudioFormat af = new AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian); // I don't understand it's constructor long length ; // length in sample frames // how cani i know the length of frames ? AudioInputStream ais = new AudioInputStream( is , af , length ); // open ( ais ); // start playing by invoking start method 
  • AudioFormat的构造函数中,我怎么能预先知道采样率,文件大小,通道是什么,以及最后的2个布尔变量?
  • 如何获得样本帧length的值?
  • 另外我如何调用start方法? 我不希望来自任何行的数据,而是来自保存在文件夹中的文件(即剪辑)

除了编码之外,音频格式还包括进一步指定数据精确排列的其他属性。 这些包括通道数,采样率,样本大小,字节顺序,帧速率和帧大小。 声音可能有不同数量的音频通道:一个用于单声道,两个用于立体声。 采样率测量每个通道每秒采集的声压“快照”(样本)的数量。 (如果声音是立体声而不是单声道,则实际在每个时刻测量两个样本:一个用于左声道,另一个用于右声道;但是,采样率仍然测量每个声道的数量,因此速率是无论通道数如何都是一样的。这是该术语的标准用法。)样本大小表示用于存储每个快照的位数; 图8和16是典型值。 对于16位采样(或任何其他大于一个字节的采样大小),字节顺序很重要; 每个样本中的字节以“little-endian”或“big-endian”样式排列。 对于像PCM这样的编码,帧由给定时间点的所有通道的样本集组成,因此帧的大小(以字节为单位)总是等于样本的大小(以字节为单位)乘以数字渠道。 但是,对于一些其他类型的编码,帧可以包含一系列压缩数据,用于整个系列的样本,以及其他非样本数据。 对于这样的编码,采样率和采样大小是指将其解码为PCM后的数据,因此它们与帧速率和帧大小完全不同。

链接

可能更好的方法来解决这个问题,就像在Java声音信息中显示的’播放Clip ‘源代码一样。 页。 它使大多数问题变得多余(因为我们在使用Clip时不需要担心细节)。

如果您在尝试源代码后有任何其他问题,请告诉我。