AudioData (クラス)
public abstract AudioData
パッケージ: CURL.AUDIO.DEVICE
直接継承しているサブクラス: Wave, Echo, ToneGenerator

オーディオ サンプルのソースの基本クラス。

説明

一般に、AudioData 基本クラスにはかまわず WaveToneGeneratorEcho などのサブクラスを使用します。ただし、他のファイル形式をサポートしたり、さまざまなフィルタ効果を提供したりする独自の AudioData サブクラスを自由に実装できます。AudioData サブクラスでは、サンプル フレーム数で示された一連のオーディオ データ サンプルを提供します。サンプル フレーム数は、サンプルあたりのデータのビット数およびサンプル データのチャネル数とは無関係です。たとえば、16 ビット 立体音響ステレオ サンプルのパルス符号変調 (PCM) データは、サンプル フレームあたりに 4 バイトを使用します。

プロパティ
audio-format:データの AudioFormat を返します。
アクセサ public AudioData.audio-format:AudioFormat
bits-per-sample:サンプルあたりのデータのビット数を返します。
アクセサ public abstract AudioData.bits-per-sample:int
channels:格納済みサンプル データに関連付けられているチャネル数を返します。モノラル サンプルは 1、ステレオ サンプルは 2、というように値を返します。
アクセサ public abstract AudioData.channels:int
duration:サンプル データの全長を秒単位で返します。
アクセサ public abstract AudioData.duration:Time
frames:この AudioData オブジェクトでサンプル フレーム数を返します。
アクセサ public abstract AudioData.frames:int
sample-rate:1 秒あたりのサンプル フレーム数を返します。
アクセサ public abstract AudioData.sample-rate:Frequency
valid?:格納済みサンプル データが有効な場合は true を返します。
アクセサ public abstract AudioData.valid?:bool

メソッド
get-sample-data:initial-frame から始まり、frame-count まで続くフレームのサンプル データ ブロックを格納している配列を返します。
public abstract {AudioData.get-sample-data
initial-frame:int = 0,
frame-count:int = -1
}:#{FastArray-of uint8}
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize




プロパティ詳細
audio-format (アクセサ)
アクセサ public AudioData.audio-format:AudioFormat

データの AudioFormat を返します。



bits-per-sample (アクセサ)
アクセサ public abstract AudioData.bits-per-sample:int

サンプルあたりのデータのビット数を返します。



channels (アクセサ)
アクセサ public abstract AudioData.channels:int

格納済みサンプル データに関連付けられているチャネル数を返します。モノラル サンプルは 1、ステレオ サンプルは 2、というように値を返します。



duration (アクセサ)
アクセサ public abstract AudioData.duration:Time

サンプル データの全長を秒単位で返します。



frames (アクセサ)
アクセサ public abstract AudioData.frames:int

この AudioData オブジェクトでサンプル フレーム数を返します。



sample-rate (アクセサ)
アクセサ public abstract AudioData.sample-rate:Frequency

1 秒あたりのサンプル フレーム数を返します。



valid? (アクセサ)
アクセサ public abstract AudioData.valid?:bool

格納済みサンプル データが有効な場合は true を返します。






メソッド詳細
get-sample-data (メソッド)
public abstract {AudioData.get-sample-data
initial-frame:int = 0,
frame-count:int = -1
}:#{FastArray-of uint8}

initial-frame から始まり、frame-count まで続くフレームのサンプル データ ブロックを格納している配列を返します。

initial-frame: この整数値は、情報の抽出を開始するオーディオ データ フレームを指定します。既定では、フレーム 0 のサンプル データの先頭から読み取りが開始されます。オーディオ ソース データがファイル (.wav など) の場合、この値は、該当ファイル内のオーディオ データの先頭からのオフセットをフレーム単位で指定します。
frame-count: この整数値は、読み取るオーディオ ソース データの、initial-frame から始まるフレーム総数を指定します。 -1 の既定値は、すべてのフレームが読み取られることを示します。

戻り値

FastArray-of uint8 には、サンプル データが格納されています。この配列には、frame-count によって要求されたフレームの数を格納します。配列に格納されている要素数(バイト数)は frame-count の倍数になる可能性があります。; 例えば、サンプルあたり16ビットの2つのチャネルでデータが構成されている場合、フレームあたり4バイトになります。 サンプルあたり8ビット以上のデータには、プラットフォームに関わらず little-endian 方式が使用されなければなりません。実際に、これが簡単な方式です。次のコードは、ステレオの16ビットオーディオデータをプラットフォームに依存せずにエンコードする方法を示しています。
let result:{FastArray-of uint8} =
    {{FastArray-of uint8}.from-size frame-count * 4, 0}
{for frame-index = 0 below frame-count do
    let (left-sample:int16, right-sample:int16) =
        {compute-next-frame}
    let left-low-byte:uint8 = {bit-and left-sample, 255} asa uint8
    let left-high-byte:uint8 = {bit-srl left-sample, 8} asa uint8
    let right-low-byte:uint8 = {bit-and rightsample, 255} asa uint8
    let right-high-byte:uint8 = {bit-srl right-sample, 8} asa uint8
    let result-out-index:int = frame-index * 4
    set result[result-out-index + 0] = left-low-byte
    set result[result-out-index + 1] = left-high-byte
    set result[result-out-index + 2] = right-low-byte
    set result[result-out-index + 3] = right-high-byte
}