我曾尝试编写播放声音文件的程序但到目前为止都没有成功。 我无法理解代码的某些部分:
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
)?答案 0 :(得分:3)
除了编码,音频格式还包括其他格式 进一步指定数据的确切排列的属性。 这些包括通道数,采样率,样本大小,字节 顺序,帧速率和帧大小。声音可能有不同的数字 音频通道:一个用于单声道,两个用于立体声。采样率 测量声压的“快照”(样本)数量 每通道每秒采取一次。 (如果声音是立体声而不是 单声道,实际上在每个时刻测量两个样本:一个 用于左声道,另一个用于右声道;然而 采样率仍然衡量每个通道的数量,因此速率是 无论渠道数量多少都一样。这是标准用法 术语。)样本大小表示用于存储的位数 每个快照;图8和16是典型值。对于16位样本(或任何 其他样本大小大于一个字节),字节顺序很重要;该 每个样本中的字节排列在“little-endian”或 “大端”风格。对于像PCM这样的编码,一个框架由...组成 在给定时间点的所有通道的样本集,所以 帧的大小(以字节为单位)总是等于样本的大小(in 字节数乘以通道数。但是,还有其他一些 编码一个帧可以包含一整套压缩数据 一系列样本,以及其他非样本数据。对于这样 编码,采样率和样本大小是指其后的数据 被解码成PCM,因此它们完全不同于 帧速率和帧大小。
答案 1 :(得分:1)
可能更好的方法是采用Java Sound info.页面中显示的“播放Clip
”源代码。它使大多数问题变得多余(因为我们在使用Clip
时不需要担心细节问题)。
如果您在尝试来源后有任何其他问题,请与我们联系。