7

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

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 方法?我不想要任何行的数据,而是保存在文件夹中的文件(即剪辑)
4

2 回答 2

3

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

关联

于 2011-07-28T17:53:22.513 回答
1

解决此问题的更好方法可能是按照Java 声音信息Clip中显示的“播放”源代码。页。它使大多数问题变得多余(因为我们在使用 a 时不需要担心细节)。 Clip

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

于 2011-07-28T19:17:19.703 回答