2016-05-26 6 views
1

この質問は少し難解かもしれません。バイト・アレイのタイム・ストリームのフレーム・レートとサイズの計算

System.Timerを使用してWindowsソケットにByte []を送信しようとしています。

データはwavファイルで、一般的なエンコードは8Khzの16ビット/サンプルです。 MP3アプリケーションでCreating audio applications with Bluetooth

、デバイスは128キロビット/秒および48 kHzのサンプルでエンコードされたファイルからMP3ストリームを送信しているとします

この記事では、私が何をしようとしていますどのようないくつかの詳細に説明します周波数。これは、384バイトのMP3オーディオフレームが24.0ミリ秒ごとに送信されることを意味します。したがって、デバイスが単純に24.0ミリ秒の周期タイマを設定し、タイマが満了したときにパケットを送信すると、一定のビットレートが維持されます。

私の質問はどのようなものですか?それはどのようにオーディオフレームがバイト長であることで、どのように我々は定期的なタイマーは、どのようにこれらの数字は、符号化形式から計算され24.0ミリ秒

です知っていますか:128キロビット/秒および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)); 

どれも私に上記の数値を与えます。

答えて

1

128kbit/secはBitsPerSampleではなくBitsPerSecondsです。

言い換えれば、16kB/s(1バイトで8ビット)です。したがって、「サンプル」が384バイト長であると判断した場合は、16000/384 = 41.6666 "samples" per second

を送信する必要があります(サンプル間の期間は一定です)。これらの384バイトを1秒間に41.6666回送信します。すなわち、毎に:1s/41.66666 = 24msです。

明らか

、384バイトのMP3のために任意選択ではない、frame lengthのための計算は、次のとおりです。

FrameLengthInBytes = 144 * BitRate/SampleRate + Padding 

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

あなたをxryl669ありがとうございました! –

関連する問題