Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我正在尝试使用java';它的API很好,但它是天堂';我没能弄明白_Java_Wav_Audio Streaming_Audio - Fatal编程技术网

I';我正在尝试使用java';它的API很好,但它是天堂';我没能弄明白

I';我正在尝试使用java';它的API很好,但它是天堂';我没能弄明白,java,wav,audio-streaming,audio,Java,Wav,Audio Streaming,Audio,我将要处理很多音频文件,我不需要播放这些文件,但我希望能够以固定的间隔(例如每秒)获得音量水平,这样我就可以大致绘制整个文件的总体音量水平。我使用java Sound API读取文件的帧,但我不确定如何解释它们(我不确定如何处理little endian以及如何将帧拆分为两个通道),我尝试将AudioInputStream发送到SourceDataLine,并每秒在dataline上调用getLevel(),但是它总是返回0。如果您对PCM进行了签名,则从字节解码的值的范围将为Java短整数(-

我将要处理很多音频文件,我不需要播放这些文件,但我希望能够以固定的间隔(例如每秒)获得音量水平,这样我就可以大致绘制整个文件的总体音量水平。我使用java Sound API读取文件的帧,但我不确定如何解释它们(我不确定如何处理little endian以及如何将帧拆分为两个通道),我尝试将AudioInputStream发送到SourceDataLine,并每秒在dataline上调用getLevel(),但是它总是返回0。

如果您对PCM进行了签名,则从字节解码的值的范围将为Java短整数(-32768到32767)。不过,声波的本质是来回扫频,因此在任何一帧中,声波的值几乎可以在任何地方,因此与你听到的音量没有很好的相关性

所以,我想你需要看很多样本,然后做一些总体分析。也许将所有与0的偏差相加为绝对值,然后除以帧数?需要多少帧?好吧,如果我们想包括,比如说,周期为50 cps的低音声波,并且要确保包括整个周期,那就是整整一秒帧的1/50。如果采样率为44100fps,则为8805帧!但也许使用这个滚动平均值会扭曲附近其他频率值的贡献

注意,我大部分是自学成才的,所以可能有更好的方法

下面是我用来将小尾端轨迹的帧转换为-1和1(呃,0.999…)之间的浮点的代码行,其中缓冲区是一个字节数组:

float audioVal  = (float)( ( ( buffer[i+1] << 8 )   
    | ( buffer[i] & 0xff ) ) / 32768.0 ); 
float audioVal=(float)((缓冲区[i+1]