这个问题可能有点棘手。
我正在尝试通过Windows套接字使用System.Timer发送Byte []。
数据是一个wav文件,每个样本的通用编码为8Khz 16bits。
本文详细解释了我要做什么:Creating audio applications with Bluetooth
我的问题是,这些数字如何得出?音频帧的长度为 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