問題タブ [riff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
694 参照

c++ - 8 ビット (ビット/サンプル) の PCM WAV ファイルに複数のチャンネルを含めることはできますか?

私はこの考えを無視するのは悪いことだと気づきましnumber of channelsbits per sample. 私の理由は、2 チャンネル 8 ビット PCM ファイルのサンプルがどのように見えるか分からないからです。

ですか1 sample = 1 channel?また1 sample = 4 bits (left) + 4 bits (right)

コンテキスト: WAV ファイルを読み取るプログラムを書いています。8 ビットの PCM WAV ファイルを見つけた場合、コードがこのように読み取られた場合 (以下を参照)、私のプログラムは複数のファイルを適切に読み取ることができません。チャネル 8 ビット PCM WAV ファイル。


0 投票する
0 に答える
61 参照

wav - RIFF ファイル形式標準の最新の代替手段はありますか?

RIFF 規格は好きですが、ファイルの長さが 4GB に制限されているのは好きではありません。RIFF のようなバイナリ データを格納するための適切な最新のファイル形式標準はありますか?

長い WAV ファイルの場合、Adobe プログラムは基本的にファイル長のバイトを無視するだけですが、新しいファイル形式を作成する場合、バイトだけを含めて使用しないのは奇妙に思えます。RIFFが現代のフォーマットで一般的に眉をひそめているとしたら、それともノーですか?

0 投票する
0 に答える
393 参照

java - Java: オブジェクトと型キャストに頼らない RIFF コンテナーの解析

Java で RIFF コンテナーを解析するためのコードをいくつか書いています (教育目的で、Java.wavまたは他の RIFF ファイルをロードするライブラリがたくさんあることを知っています)。私のデザインの目標は、可能な限りフォーマットに固執することです。

ウィキペディアによると、基本的な RIFF 形式は非常に単純です。

  • 4 バイト: このチャンクの ASCII 識別子 (例は "fmt " と "data" です。"fmt " 内のスペースに注意してください)。
  • 4 バイト: このチャンクの長さを持つ符号なしのリトル エンディアン 32 ビット整数 (このフィールド自体とチャンク識別子を除く)。
  • 可変サイズ フィールド: 前のフィールドで指定されたサイズのチャンク データ自体。
  • チャンクの長さが偶数でない場合は、パッド バイト。

現在、可変サイズのフィールドの表現に苦労しています。これまでのところ、私が思いついた最高のものはそのように見えます。BaseFormat1 つ目は、すべての形式解析クラスのベースとなる抽象クラスです。

ストリームへの参照を格納するだけで、実行readされるメソッドとのインターフェースとして機能します。次に、2 つの主要な形式クラスがあります。

そこには派手なことは何もありません。簡潔にするために、クラスを投稿していません。これは、、、、などの便利なユーティリティ関数を備えMyStreamた非常に単純なラッパーです。InputStreamgetIntgetBytegetAsciiString

RIFF 形式のすべての部分は、独自のクラスを取得します。RIFF ファイル全体はRiffであり、チャンクをクラスとして読み取ろうとし、Chunkチャンク ヘッダー + ボディを読み取ろうとします。そして魔法が起こります。大きなswitch内部Chunk.read()が、チャンク内のどのフォーマット クラスを適用するかを選択します。つまりFmt1BodyFmt2Bodyなどです。

それは機能し、実際に RIFF ファイルを読み取ることができます。私が抱えている問題は、すべての異なるチャンク形式が、共通点のない異なるクラスによって表されることです。したがって、メモリ内で解析されたファイルを操作する場合、多くの型チェックとアップキャストを行うことになります。つまり、次のようなものです。

などなど。これは多くの関数型言語では正常ですが、Java では悪い方法だと思います。Object+型チェック+アップキャスト(または、BaseFormatとにかくキャストが必要になるような同等に役に立たないインターフェース)に頼らずに、メモリ内のRIFFコンテナを表現するより良い方法はありますか?

サブフォーマット クラスのソース

streamサブフォーマット クラスに関心のある方のために、メソッドと havingread()メソッドを使用する以外に共通点がないことを示すサンプルをいくつか示します。