C# 计算字节数组的定时流的帧速率和大小
这个问题可能有点棘手 我正在尝试使用System.Timer通过Windows套接字发送字节[] 数据为wav文件,常用编码为8Khz,每个样本16位 这篇文章详细解释了我要做的事情: 在MP3应用程序中,假设设备从以128 kbit/sec和48 kHz采样频率编码的文件发送MP3流。这意味着每隔24.0毫秒发送384字节长的MP3音频帧。因此,如果设备只是将周期计时器设置为24.0毫秒,并在计时器过期时发送数据包,则将保持恒定的比特率 我的问题是,这些数字是如何得出的?音频帧是如何384字节长的?我们如何知道周期计时器是24.0毫秒的 如何从编码格式计算这些数字:128 kbit/sec和48 kHz采样频率 我尝试过的数学:C# 计算字节数组的定时流的帧速率和大小,c#,audio,timer,C#,Audio,Timer,这个问题可能有点棘手 我正在尝试使用System.Timer通过Windows套接字发送字节[] 数据为wav文件,常用编码为8Khz,每个样本16位 这篇文章详细解释了我要做的事情: 在MP3应用程序中,假设设备从以128 kbit/sec和48 kHz采样频率编码的文件发送MP3流。这意味着每隔24.0毫秒发送384字节长的MP3音频帧。因此,如果设备只是将周期计时器设置为24.0毫秒,并在计时器过期时发送数据包,则将保持恒定的比特率 我的问题是,这些数字是如何得出的?音频帧是如何384字节
double BitsPerSample = 128000;
double SamplesPerSecond = 48000;
// 1 for Mono, 2 for Stereo:
double Channels = 2;
double SingleFramePeriod = 1 / SamplesPerSecond;
double BitsPerSecond = SamplesPerSecond * BitsPerSample * Channels;
double BytesPerSecond = ( BitsPerSecond / 8 );
double BytesPerFrame = (1 / (BitsPerSecond / 8));
没有一个能给出上面的数字。128kbit/sec不是比特采样,而是比特秒 换言之,它是16kB/s(一个字节中有8位)。因此,如果您决定“sample”的长度为384字节,则需要每秒发送
16000/384=41.6666个“samples”
如果您希望尽可能平稳地发送数据(“采样”之间的时间间隔是恒定的),这意味着您必须每秒发送384字节41.6666次,即每:1s/41.66666=24ms
显然,384字节不是MP3的任意选择,其计算如下:
谢谢xryl669!
FrameLengthInBytes = 144 * BitRate / SampleRate + Padding
=> For 128 kbit/s, 48Khz, 0 padding, it gives 384 bytes