AudioFormat クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
クラスは AudioFormat
、さまざまなオーディオ形式とチャネル構成定数にアクセスするために使用されます。
[Android.Runtime.Register("android/media/AudioFormat", DoNotGenerateAcw=true)]
public class AudioFormat : Java.Lang.Object, Android.OS.IParcelable, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("android/media/AudioFormat", DoNotGenerateAcw=true)>]
type AudioFormat = class
inherit Object
interface IParcelable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 継承
- 属性
- 実装
注釈
クラスは AudioFormat
、さまざまなオーディオ形式とチャネル構成定数にアクセスするために使用されます。 たとえば、 および AudioRecord
でAudioTrack
、4 番目のパラメーターが定数の 1 つである などのAudioTrack#AudioTrack(int, int, int, int, int, int)
コンストラクターの個々のAudioFormat.ENCODING_*
パラメーターで有効な値として使用されます。 定数はAudioFormat
、 などMediaFormat#KEY_CHANNEL_MASK
、メディアでよくMediaFormat
使用されるオーディオ関連の値を指定するためにも使用されます。
クラスを AudioFormat.Builder
使用して、format クラスのインスタンスを AudioFormat
作成できます。 このようなインスタンスの AudioFormat.Builder
構成と構築の仕組みに関するドキュメントについては、 を参照してください。 ここでは、クラスが各インスタンス<で伝達できるメインの概念AudioFormat
について説明します。ol<>li>サンプル レート<li>エンコード<li>チャネル マスク</ol>
に密接に関連付 AudioFormat
けられているオーディオ フレームの概念は、オーディオ データの最小サイズの完全な単位を表すためにドキュメント全体で使用されます。
<h4 id="sampleRate">Sample rate</h4>
Hz で表されるインスタンスの AudioFormat
サンプル レートは、再生または記録しているコンテンツの 1 秒あたりの各チャネルのオーディオ サンプル数を表します。 コンテンツがレンダリングまたは生成されるサンプル レートではありません。 たとえば、8000Hzのメディアサンプルレートのサウンドは、48000Hzのサンプルレートで動作するデバイスで再生できます。サンプルレート変換はプラットフォームによって自動的に処理され、6倍の速度では再生されません。
API android.os.Build.VERSION_CODES#M
の時点では、 と では最大 192kHz のAudioRecord
AudioTrack
サンプル レートがサポートされ、必要に応じてサンプル レート変換が実行されます。 効率を向上させ、損失の変換を回避するには、エンドポイント デバイスのサンプル レートとAudioTrack
エンドポイント デバイスのサンプル レートAudioRecord
を一致させ、より高いレートを保証する特別なデバイス機能がない限り、サンプル レートを 48kHz 以下に制限することをお勧めします。
<h4 id="encoding">Encoding</h4>
オーディオ エンコードは、オーディオ データのビット表現を記述するために使用されます。これは、リニア PCM または AC3 や DTS などの圧縮オーディオのいずれかになります。
リニア PCM の場合、オーディオ エンコードでは、サンプル サイズ、8 ビット、16 ビット、または 32 ビット、およびサンプル表現 (整数または float) が記述されます。 <ul><li>#ENCODING_PCM_8BIT
: オーディオ サンプルは、[0, 255] の範囲内の 8 ビット符号なし整数で、0 の場合は 128 オフセットです。 これは通常、Java バイトとしてバイト配列または ByteBuffer に格納されます。 Java バイトは <em>signed</em> であるため、最も重要なビットが反転されるため、算術演算と変換には注意してください。 </li li><>#ENCODING_PCM_16BIT
: オーディオ サンプルは、通常、Java short として短い配列に格納される 16 ビット符号付き整数ですが、short が ByteBuffer に格納されると、ネイティブ エンディアンになります (既定の Java ビッグ エンディアンと比較して)。 short には [-32768, 32767] の全範囲があり、固定小数点 Q.15 データとして解釈される場合があります。 </li li>#ENCODING_PCM_FLOAT
<>: API android.os.Build.VERSION_CODES#LOLLIPOP
で導入されたこのエンコードは、オーディオ サンプルが 32 ビット IEEE 単精度浮動小数点であることを指定します。 サンプルは、Float 配列内の Java float として操作できますが、ByteBuffer 内ではネイティブのエンディアン バイト順に格納されます。 オーディオ データの ENCODING_PCM_FLOAT
標準範囲は [-1.0, 1.0] です。 これは、正の最大値 1.0 が間隔に含まれるかどうかによって異なります。 呼び出し範囲外の値は、エンドポイント デバイスに送信する前にクランプされます。 NaN の処理は未定義です。非正規はゼロとして扱われ得る。無限大と無限大は、通常、&ndash の AudioTrack
他の値と同様にクランプされます。NaN を簡単に生成できるため、無限大を避けるようにしてください。 <br> 符号付き 16 ビット整数 short よりも高いオーディオ ビット深度を実現するには、オーディオ キャプチャ、処理、再生に を使用 ENCODING_PCM_FLOAT
することをお勧めします。 浮動小数点は、最新の CPU によって効率的に操作され、24 ビット符号付き整数よりも高い精度を持ち、32 ビット符号付き整数よりも動的範囲が大きくなります。 AudioRecord
API および API android.os.Build.VERSION_CODES#M
AudioTrack
android.os.Build.VERSION_CODES#LOLLIPOP
サポート ENCODING_PCM_FLOAT
の時点で。 </li li><#ENCODING_PCM_24BIT_PACKED
>: API android.os.Build.VERSION_CODES#S
で導入されたこのエンコードは、オーディオ サンプルが、ネイティブ エンディアンの または バイト配列に ByteBuffer
3 Java バイトとして格納される拡張有効桁数 24 ビット符号付き整数であることを指定します (を参照)。java.nio.ByteOrder#nativeOrder()
各サンプルには [-8388608、8388607] の全範囲があり、固定小数点 Q.23 データとして解釈できます。 </li li><#ENCODING_PCM_32BIT
>: API android.os.Build.VERSION_CODES#S
で導入されたこのエンコードは、オーディオ サンプルが、ネイティブ エンディアンの または バイト配列に ByteBuffer
4 Java バイトとして格納される拡張有効桁数 32 ビット符号付き整数であることを指定します (を参照)。java.nio.ByteOrder#nativeOrder()
各サンプルには [-2147483648、2147483647] の全範囲があり、固定小数点 Q.31 データとして解釈できます。 </li></ul>
圧縮オーディオの場合、エンコードでは、 や #ENCODING_DTS
などの#ENCODING_AC3
圧縮方法が指定されます。 通常、圧縮されたオーディオ データはバイト配列または ByteBuffer にバイトとして格納されます。 に圧縮オーディオ エンコードを指定すると、圧縮されたオーディオをデコードできるエンドポイント (HDMI など) への出力用の直接 (非混合) トラックが作成されます AudioTrack
。 (ほとんどの) 他のエンドポイントでは、このような圧縮オーディオをデコードできない場合は、最初にデータをデコードする必要があります。通常は を MediaCodec
作成します。 または、圧縮されたオーディオ ファイルまたはストリームの再生に を使用 MediaPlayer
することもできます。
圧縮されたオーディオがダイレクト AudioTrack
を介して送信される場合、オーディオ アクセス ユニットの正確な倍数で書き込む必要はありません。これは入力バッファーとは MediaCodec
異なります。
<h4 id="channelMask">Channel mask</h4>
チャネル マスクは、 と AudioRecord
でAudioTrack
使用され、オーディオ フレーム内のサンプルとその配置を記述します。 また、エンドポイント (USB オーディオ インターフェイス、ヘッドフォンに接続された DAC など) でも使用され、特定のデバイスの許容される構成を指定します。 <br>API android.os.Build.VERSION_CODES#M
の時点では、チャネル マスクにはチャネル位置マスクとチャネル インデックス マスクの 2 種類があります。
<h5 id="channelPositionMask">チャネル位置マスク</h5> チャネル位置マスクは、元の Android チャネル マスクであり、API android.os.Build.VERSION_CODES#BASE
以降で使用されます。 入力と出力の場合、位置の性質 (録音または再生用のスピーカーまたはマイクの位置) を意味します。 <br>チャネル位置マスクの場合、許可される各チャネル位置はチャネル マスク内のビットに対応します。 そのチャネル位置がオーディオ フレームに存在する場合は、そのビットが設定され、それ以外の場合は 0 になります。 ビットの順序 (lsb から msb) は、オーディオ フレーム内のその位置のサンプルの順序に対応します。 <br>チャネル数別の標準チャネル位置マスクは次のとおりです<。br><table<>tr><td>channel count</td td><td>チャネル位置マスク</td></tr tr<>><td>1</td><td><#CHANNEL_OUT_MONO
/td></tr tr><><td>2</td><td>#CHANNEL_OUT_STEREO
</td></tr><td><td>3</td><td | #CHANNEL_OUT_STEREO
<#CHANNEL_OUT_FRONT_CENTER
>/td></tr tr><><td 4></td><td>#CHANNEL_OUT_QUAD
</td></tr tr><td>><5</td td#CHANNEL_OUT_QUAD
> | <#CHANNEL_OUT_FRONT_CENTER
></td></tr tr><><td>6</td><td<>#CHANNEL_OUT_5POINT1
/td></tr tr><<>td>7</td><td#CHANNEL_OUT_BACK_CENTER
| <#CHANNEL_OUT_5POINT1
>/td></tr tr><><td>8</td><td/td><>#CHANNEL_OUT_7POINT1_SURROUND
</tr<>/table><br>これらのマスクは、 の ORed 複合です個々のチャネル マスク。 たとえば#CHANNEL_OUT_STEREO
、 と で#CHANNEL_OUT_FRONT_LEFT
#CHANNEL_OUT_FRONT_RIGHT
構成されます。
次の図は、リスナーの上から見た出力チャネルのレイアウトを表しています ("lis" 位置の中央で、フロント センター チャネルに面しています)。
TFL ----- TFC ----- TFR T is Top
| \ | / |
| FL --- FC --- FR | F is Front
| |\ | /| |
| | BFL-BFC-BFR | | BF is Bottom Front
| | | |
| FWL lis FWR | W is Wide
| | | |
TSL SL TC SR TSR S is Side
| | | |
| BL --- BC -- BR | B is Back
| / \ |
TBL ----- TBC ----- TBR C is Center, L/R is Left/Right
すべての "T" (上部) チャネルがリスナーの上に、すべての "BF" (下部前面) チャネルがリスナーの下に、他のチャネルはすべてリスナーの水平平面にあります。 組み合わせて使用する場合、LFE1 と LFE2 はリスナーの下にあり、単独で使用する場合、LFE プレーンは未定義です。 省略形については、チャネル定義を参照してください
<h5 id="channelIndexMask">チャネル インデックス マスク</h5> チャネル インデックス マスクは API android.os.Build.VERSION_CODES#M
で導入されています。 ソースまたはシンク エンドポイントから特定のチャネルを数値で選択できます。つまり、最初のチャネル、2 つ目のチャネルなどです。 これにより、エンドポイントのチャネルに位置を人為的に割り当てたり、エンドポイントのチャネル位置マスク内の i<sup>/<sup> 位置ビットが何であるかを把握したりする問題を回避できます。 <br>チャネル インデックス マスクがこの混乱に対処する例を次に示します。4 チャネル USB デバイスの処理。 位置マスクを使用し、チャネル数に基づいて、これは #CHANNEL_OUT_QUAD
デバイスになりますが、実際にはチャネル 0 からチャネル 3 へのみ関心があります。 USB デバイスには、次の個々のビット チャネル マスクが含まれます: #CHANNEL_OUT_FRONT_LEFT
、 #CHANNEL_OUT_FRONT_RIGHT
、 #CHANNEL_OUT_BACK_LEFT
および #CHANNEL_OUT_BACK_RIGHT
。 しかし、チャネル 0 はどれで、チャネル 3 はどれですか? <br>チャネル インデックス マスクの場合、各チャネル番号はマスク内のビットとして表され、lsb (チャネル 0) から msb まで、数値的にはこのビット値は です 1 << channelNumber
。 設定されたビットは、チャネルがオーディオ フレームに存在することを示し、それ以外の場合はクリアされます。 ビットの順序は、オーディオ フレーム内のチャネル番号のサンプル順序にも対応します。 <br>前の 4 チャネル USB デバイスの例では、デバイスにはチャネル インデックス マスク 0xF
があります。 1 つ目と 3 つ目のチャネルのみを選択するとします。これはチャネル インデックス マスク 0x5
(最初と 3 番目のビット セット) に対応します。 でこのチャネル インデックス マスクを AudioTrack
使用する場合、オーディオ フレームは 2 つのサンプル、チャネル 0 にルーティングされた各フレームの最初のサンプル、およびチャネル 2 にルーティングされる各フレームの 2 番目のサンプルで構成されます。 チャネル数別の正規チャネル インデックス マスクは、式 (1 << channelCount) - 1
によって指定されます。
<h5>ユース ケース</h5><ul><li>Channel position mask for an endpoint:CHANNEL_OUT_FRONT_LEFT
, CHANNEL_OUT_FRONT_CENTER
, etc. for HDMI home theater purposes. <li>オーディオ ストリームのチャネル位置マスク: ムービー コンテンツを AudioTrack
出力する を作成します。ここで、5.1 マルチチャネル出力が書き込まれます。 <li>エンドポイントのチャネル インデックス マスク: 入力と出力が左右のスピーカーまたはマイクに対応していない USB デバイス。 <li>オーディオ ストリームのチャネル インデックス マスク: は AudioRecord
、エンドポイントの 3 番目と 4 番目のオーディオ チャネル (つまり、2 番目のチャネル ペア) のみを必要とし、対応する位置については気にしません。その場合、チャネル インデックス マスクは です 0xC
。 マルチチャネル AudioRecord
セッションでは、チャネル インデックス マスクを使用する必要があります。 </ul><h4 id="audioFrame">Audio Frame</h4>
リニア PCM の場合、オーディオ フレームは、同時にキャプチャされた一連のサンプルで構成され、そのカウントとチャネルの関連付けはチャネル マスクによって指定され、そのサンプル コンテンツはエンコードによって指定されます。 たとえば、ステレオ 16 ビット PCM フレームは、2 つの 16 ビットリニア PCM サンプルで構成され、フレーム サイズは 4 バイトです。 圧縮オーディオの場合、オーディオ フレームは、デコードとビットストリーム アクセスのために論理的にグループ化された圧縮データ バイトのアクセス単位 (例: MediaCodec
)、または圧縮データの 1 バイト (例: AudioTrack#getBufferSizeInFrames() AudioTrack.getBufferSizeInFrames()
)、または圧縮データをデコードした線形 PCM フレームの結果 (たとえばAudioTrack#getPlaybackHeadPosition() AudioTrack.getPlaybackHeadPosition()
、オーディオ フレームが使用されるコンテキストに応じて) を参照する場合があります。 の目的で AudioFormat#getFrameSizeInBytes()
、圧縮データ形式は 1 バイトのフレーム サイズを返します。
の Java ドキュメント android.media.AudioFormat
。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
AudioFormat() | |
AudioFormat(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
フィールド
ChannelInvalid |
オーディオ チャネル マスクが無効です |
ChannelOut5point1point2 |
古い.
5 の出力チャネル マスク。 |
ChannelOut5point1point4 |
古い.
5 の出力チャネル マスク。 |
ChannelOut6point1 |
古い.
6 の出力チャネル マスク。 |
ChannelOut7point1 |
このメンバーは非推奨とされます。 |
ChannelOut7point1point2 |
古い.
7 の出力チャネル マスク。 |
ChannelOut7point1point4 |
古い.
7 の出力チャネル マスク。 |
ChannelOut9point1point4 |
古い.
9 の出力チャネル マスク。 |
ChannelOut9point1point6 |
古い.
9 の出力チャネル マスク。 |
ChannelOutBottomFrontCenter |
古い.
下部フロント センター出力チャネル (FC の下のチャネル図の BFC を参照) |
ChannelOutBottomFrontLeft |
古い.
左下の出力チャネル (FL の下のチャネル図の BFL を参照) |
ChannelOutBottomFrontRight |
古い.
右下の出力チャネル (FR の下のチャネル図の BFR を参照) |
ChannelOutFrontWideLeft |
古い.
フロントワイド左出力チャネル (チャネル図の FWL を参照) |
ChannelOutFrontWideRight |
古い.
フロントワイド右出力チャンネル(チャンネル図のFWRを参照) |
ChannelOutLowFrequency2 |
古い.
第2のLFEチャネルと組み合わせて |
ChannelOutTopBackCenter |
古い.
トップ バック センター出力チャネル (BC 上のチャネル図の TBC を参照) |
ChannelOutTopBackLeft |
古い.
左上の出力チャネル (BL の上のチャネル図の TBL を参照) |
ChannelOutTopBackRight |
古い.
右上の出力チャネル (BR の上のチャネル図の TBR を参照) |
ChannelOutTopCenter |
古い.
上部中央 (リスナーの上) 出力チャネル (チャネル図の TC を参照) |
ChannelOutTopFrontCenter |
古い.
上部フロント センター出力チャネル (FC 上のチャネル図の TFC を参照) |
ChannelOutTopFrontLeft |
古い.
左上の出力チャネル (FL 上のチャネル図の TFL を参照) |
ChannelOutTopFrontRight |
古い.
右上の出力チャネル (FR 上のチャネル図の TFR を参照) |
ChannelOutTopSideLeft |
古い.
左上の出力チャネル (SL の上のチャネル図の TSL を参照) |
ChannelOutTopSideRight |
古い.
右上の出力チャネル (SR の上のチャネル図の TSR を参照) |
EncodingDra |
古い.
オーディオ データ形式: DRA 圧縮 |
EncodingDsd |
古い.
オーディオ データ形式: Direct Stream Digital |
EncodingDtsHdMa |
古い.
オーディオ データ形式: DTS HD マスター オーディオ圧縮 DTS HD マスター オーディオ ストリームは可変ビット レートであり、ロスレス オーディオが含まれています。 |
EncodingDtsUhd |
オーディオ データ形式: DTS UHD Profile-1 compressed (別名 DTS:X Profile 1) には、ENCODING_DTS_UHD_P1と同じ意味と値があります。 |
EncodingDtsUhdP1 |
古い.
オーディオ データ形式: DTS UHD Profile-1 compressed (別名 DTS:X Profile 1) は、非推奨 |
EncodingDtsUhdP2 |
古い.
オーディオ データ形式: DTS UHD Profile-2 圧縮 DTS-UHD Profile-2 は、Channel-Based オーディオ、Object-Based オーディオ、高次アンビソニック プレゼンテーションを 4 番目の順序まで配信できます。 |
EncodingMpeghBlL3 |
古い.
オーディオ データ形式: MPEG-H ベースライン プロファイル、レベル 3 |
EncodingMpeghBlL4 |
古い.
オーディオ データ形式: MPEG-H ベースライン プロファイル、レベル 4 |
EncodingMpeghLcL3 |
古い.
オーディオ データ形式: MPEG-H 低複雑度プロファイル、レベル 3 |
EncodingMpeghLcL4 |
古い.
オーディオ データ形式: MPEG-H 低複雑度プロファイル、レベル 4 |
EncodingOpus |
古い.
オーディオ データ形式: OPUS 圧縮。 |
EncodingPcm24bitPacked |
古い.
オーディオ データ形式: サンプルあたり PCM 24 ビットが 3 バイトとしてパックされます。 |
EncodingPcm32bit |
古い.
オーディオ データ形式: サンプルあたり PCM 32 ビット。 |
SampleRateUnspecified |
サンプル レートはルートに依存する値になります。 |
プロパティ
ChannelCount |
チャネル数を返します。 |
ChannelIndexMask |
チャネル インデックス マスクを返します。 |
ChannelMask |
チャネル マスクを返します。 |
Class |
この |
Creator |
クラスは |
Encoding |
エンコーディングを返します。 |
FrameSizeInBytes |
フレーム サイズをバイト単位で返します。 |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
JniIdentityHashCode |
クラスは |
JniPeerMembers |
クラスは |
PeerReference |
クラスは |
SampleRate |
サンプル レートを返します。 |
ThresholdClass |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
ThresholdType |
この API は Mono for Android インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
DescribeContents() |
クラスは |
Dispose() |
クラスは |
Dispose(Boolean) |
クラスは |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションが判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
ToArray<T>() |
クラスは |
ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
UnregisterFromRuntime() |
クラスは |
Wait() |
現在のスレッドが起動するまで待機します。通常<は、通知</em> または>< em 中断</em によって待機します>。> (継承元 Object) |
Wait(Int64) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<は、通知></em> または <>em 中断</em>、または特定のリアルタイムが経過するまで待機します。 (継承元 Object) |
WriteToParcel(Parcel, ParcelableWriteFlags) |
クラスは |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
クラスは |
IJavaPeerable.DisposeUnlessReferenced() |
クラスは |
IJavaPeerable.Finalized() |
クラスは |
IJavaPeerable.JniManagedPeerState |
クラスは |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
クラスは |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
クラスは |
IJavaPeerable.SetPeerReference(JniObjectReference) |
クラスは |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
クラスは |
GetJniTypeName(IJavaPeerable) |
クラスは |