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

时间:2011-07-28 17:49:43

标签: 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
  • AudioFormat的构造函数中,我怎么能预先知道采样率,文件大小,通道是什么,最后是2布尔变量?
  • 如何获取示例帧的值length
  • 另外我如何调用start方法?我不希望来自任何行的数据,而是来自保存在文件夹中的文件(即剪辑)

2 个答案:

答案 0 :(得分:3)

  

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

Link

答案 1 :(得分:1)

可能更好的方法是采用Java Sound info.页面中显示的“播放Clip”源代码。它使大多数问题变得多余(因为我们在使用Clip时不需要担心细节问题)。

如果您在尝试来源后有任何其他问题,请与我们联系。