gpt4 book ai didi

c# - 计算字节数组定时流的帧速率和大小

转载 作者:行者123 更新时间:2023-12-02 23:08:17 25 4
gpt4 key购买 nike

这个问题可能有点棘手。

我正在尝试通过Windows套接字使用System.Timer发送Byte []。

数据是一个wav文件,每个样本的通用编码为8Khz 16bits。

本文详细解释了我要做什么:Creating audio applications with Bluetooth

In an MP3 application, suppose the device is sending an MP3 stream from a file encoded at 128 kbit/sec and 48 kHz sample frequency. This means an MP3 audio frame 384 bytes long is sent every 24.0 msec. So, if the device simply sets a periodic timer for 24.0 msec and sends a packet when the timer expires the constant bit rate will be maintained.



我的问题是,这些数字如何得出?音频帧的长度为 384 字节如何,我们如何知道周期计时器为 24.0毫秒

如何从编码格式(128 kbit / sec和48 kHz采样频率)计算出这些数字?

我尝试过的数学:
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));

这些都没有给我上述数字。

最佳答案

128 kbit / sec不是BitsPerSample,而是BitsPerSeconds。

换句话说,它是16kB / s(一个字节8位)。因此,如果您确定“样本”的长度为384个字节,则需要发送16000 / 384 = 41.6666 "samples" per second
如果您希望发送的消息尽可能平滑(“样本”之间的时间间隔是恒定的),这意味着您必须每秒发送4384666次这些384字节,即,每次:1s / 41.66666 = 24ms

显然,384字节不是MP3的任意选择,frame length的计算如下:

FrameLengthInBytes = 144 * BitRate / SampleRate + Padding

=> For 128 kbit/s, 48Khz, 0 padding, it gives 384 bytes

关于c# - 计算字节数组定时流的帧速率和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37449498/

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