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

Suh*_*pta 6 java audio javasound

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

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
Run Code Online (Sandbox Code Playgroud)
  • 在构造函数中,AudioFormat我如何才能知道采样率,文件大小,通道是什么,以及最后的2个布尔变量?
  • 如何获得样本帧(length)的值?
  • 另外我如何调用start方法?我不希望来自任何行的数据,而是来自保存在文件夹中的文件(即剪辑)

Jam*_*mes 3

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

关联