gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:55:31 25 4
gpt4 key购买 nike

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

我对帧速率感到困惑(以及它与采样率有何关系或无关)。

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

float skipTotalFrames = audioInputStream.getFormat().getFrameRate() * (startPos / 1000);
long byteStartPos = (long) (audioInputStream.getFormat().getFrameSize() * skipTotalFrames);

我在哪里下车?

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

最佳答案

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

查看您引用的 API,首先探测属性:vbr(可变比特率)如果它是真的,您想要的计算将无法实现。对于 WAV,它应该始终保持恒定的比特率(IE.false)。然后检索属性:比特率

比特率 = (sample_rate) * (bit_depth) * (number_of_channels) === 比特每秒

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;

关于Java - 确定要从 wave 文件读取以获取时间戳的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com