Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Java—确定从wave文件读取以获取时间戳的字节数_Java_Audio_Wav_Frame Rate_Sample Rate - Fatal编程技术网

Java—确定从wave文件读取以获取时间戳的字节数

Java—确定从wave文件读取以获取时间戳的字节数,java,audio,wav,frame-rate,sample-rate,Java,Audio,Wav,Frame Rate,Sample Rate,我有一个对象(从audioInputStream.getFormat()返回)。我有一个时间戳(以毫秒为单位),我想从相应的wav文件开始读取。如何确定从AudioInputStream中读取/跳过多少字节以获得适当的时间戳 我对帧速率(以及它与采样率的关系)感到困惑 这就是我目前所拥有的。。。startPos是以毫秒为单位的时间戳 float skipTotalFrames = audioInputStream.getFormat().getFrameRate() * (startPos /

我有一个对象(从
audioInputStream.getFormat()
返回)。我有一个时间戳(以毫秒为单位),我想从相应的wav文件开始读取。如何确定从AudioInputStream中读取/跳过多少字节以获得适当的时间戳

我对帧速率(以及它与采样率的关系)感到困惑

这就是我目前所拥有的。。。startPos是以毫秒为单位的时间戳

float skipTotalFrames = audioInputStream.getFormat().getFrameRate() * (startPos / 1000);
long byteStartPos = (long) (audioInputStream.getFormat().getFrameSize() * skipTotalFrames);
我在哪下车


编辑:我的代码确实有效,我只是有其他错误。

WAV格式通常以44字节的头开始,然后是每秒44100次的音频采样(采样率),其中每个采样是16位有符号整数小端点(位深度)。。。比特率的计算方法是将这两个基本因素相乘:(采样率)*(比特深度)。。。这是单声道的,所以如果是立体声的话,这些采样是交错的

查看您引用的API,第一个探测属性:vbr(可变比特率),如果它为真,那么您想要的计算将无法实现。对于WAV,它应该始终是一个恒定的比特率(即false)。然后检索属性:比特率

比特率=(采样率)*(比特深度)*(信道数)==每秒比特数

For argument sake lets say your ...

sample_rate = 44100;  // 44.1 kHz which is typical
bit_depth = 16;       // also typical
number_of_channels = 2;  // mono --> 1   stereo --> 2

look_ahead_milli_sec = 1500; // you are given this in milliseconds

bit_rate = sample_rate * bit_depth * number_of_channels;
bit_rate = 44100 * 16 * 2;
bitrate = 1411200; // based on above calculation

bytes_per_second = bitrate / 8; // bits to bytes per sec
bytes_per_second = 1411200 / 8; // bits to bytes per sec
bytes_per_second = 176400; // bytes per sec

look_ahead_in_bytes = (bytes_per_second / 1000) * look_ahead_milli_sec;

look_ahead_in_bytes = (176400 / 1000) * 1500;    
look_ahead_in_bytes = 264600;

据我所知,帧速率等同于采样率。帧大小可以大于样本大小,因为它考虑了多个通道。这似乎正确吗?有道理。。。很容易通过实验验证。。。在毫秒级的试验中,在几个起始位置运行此程序。。。一定要告诉我们你的发现