5

.wav ファイルがあるとすると、C# でそのビット レート プロパティを読み取る最良の方法は何でしょうか。Shell を試して質問しました「ビットレート」プロパティはインデックス 28 で固定されていますか? 答えがないので。また、シェルはオーディオ ファイルのプロパティを読み取る最良の方法ではないと考えています。さまざまなオープン ソース メディア ライブラリについて調査しましたが、多くは見つかりませんでした。

TagLib#: これは問題なく動作しますが、2 つの問題があります。ビット レートが非常に低い場合 (30 未満など) には、実際のビット レートが反映されず、0 が返されるだけです。ライセンスには http://opensource.org/licenses/LGPL-2.1と記載されています

NAudio: ビットレートを読み取るためのプロパティを公開していないため、計算する必要があります。調査の結果、ビットレートを計算するためのこの式を得ました。ビットレート = サンプルレート * チャネル * BitsPerSample. ほとんどの場合、これで問題なく動作しますが、一部の .wav ファイルで BitsPerSample = 0 になると失敗します。はい、ファイルはまったく問題ありません。再生できますが、それでも BitsPerSample は 0 です。

MediaInfo: ここでも単純なプロパティはありません。オーディオ ファイルのすべてのプロパティをループしてから、「全体のビット レート」を検索する必要があります。さらに、プロジェクトに 2 つの dll を追加する必要があります。1 つは .net ラッパーで、もう 1 つは実際の dll です。

非常に長い要約で申し訳ありませんが、既に行ったことを示さずに「どうすればオーディオ ファイルのビット レートを取得できますか」と尋ねたくなかったのです。では、.wav オーディオ ファイルがある場合、ビットレートを取得するためにどのライブラリ/メソッドを使用しますか?

4

2 に答える 2

5

ファイルのオフセット 28 の値を簡単に読み取ることができます。

int bitrate;
using (var f = File.OpenRead(filename))
{
    f.Seek(28, SeekOrigin.Begin);
    byte[] val = new byte[4];
    f.Read(val, 0, 4);
    bitrate = BitConverter.ToInt32(val, 0);
}

これは、圧縮されていない WAV ファイル (最も一般的なタイプ) で機能するはずです。https://ccrma.stanford.edu/courses/422/projects/WaveFormat/を参照してください。

于 2014-02-05T05:25:47.900 に答える