Win32 API 日本語リファレンス
ホームMedia.KernelStreaming › KSJACK_DESCRIPTION

KSJACK_DESCRIPTION

構造体
サイズx64: 28 バイト / x86: 28 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
ChannelMappingDWORD4+0+0

ステレオジャックの 2 つのオーディオチャネルとスピーカー位置との対応付けを指定します。

Windows Vista では、このメンバーの値は次の表に示す EChannelMapping 列挙型の値のいずれかです。

第 1 チャネル 第 2 チャネル
ePcxChanMap_FL_FR 前方左スピーカー 前方右スピーカー
ePcxChanMap_FC_LFE 前方中央スピーカー 低域効果用スピーカー (サブウーファー)
ePcxChanMap_BL_BR 後方左スピーカー 後方右スピーカー
ePcxChanMap_FLC_FRC 前方左中央スピーカー 前方右中央スピーカー
ePcxChanMap_SL_SR 側面左スピーカー 側面右スピーカー
ePcxChanMap_Unknown 不明 不明

チャネル数が 1、3、またはそれ以上の物理コネクタの場合、このメンバーの値は ePcxChanMap_Unknown になります。

Windows 7 では、EChannelMapping 列挙型は非推奨になりました。このメンバーのデータ型は DWORD です。 このメンバーには、0、または Ksmedia.h で定義されている次の値のうち 1 つ以上をビット単位の OR で組み合わせた値が格納されます。

#define SPEAKER_FRONT_LEFT              0x1
#define SPEAKER_FRONT_RIGHT             0x2
#define SPEAKER_FRONT_CENTER            0x4
#define SPEAKER_LOW_FREQUENCY           0x8
#define SPEAKER_BACK_LEFT               0x10
#define SPEAKER_BACK_RIGHT              0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER    0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER   0x80
#define SPEAKER_BACK_CENTER             0x100
#define SPEAKER_SIDE_LEFT               0x200
#define SPEAKER_SIDE_RIGHT              0x400
#define SPEAKER_TOP_CENTER              0x800
#define SPEAKER_TOP_FRONT_LEFT          0x1000
#define SPEAKER_TOP_FRONT_CENTER        0x2000
#define SPEAKER_TOP_FRONT_RIGHT         0x4000
#define SPEAKER_TOP_BACK_LEFT           0x8000
#define SPEAKER_TOP_BACK_CENTER         0x10000
#define SPEAKER_TOP_BACK_RIGHT          0x20000
ColorDWORD4+4+4ジャックの色。色は、8 ビットの青、緑、赤の各色成分を連結した 32 ビットの RGB 値として表されます。青成分は最下位の 8 ビット (ビット 0 ~ 7)、緑成分はビット 8 ~ 15、赤成分はビット 16 ~ 23 を占めます。最上位の 8 ビットは 0 です。ジャックの色が不明な場合、または物理コネクタに識別可能な色がない場合、このメンバーの値は 0x00000000 (黒) になります。
ConnectionTypeEPcxConnectionType4+8+8

接続の種類。このメンバーの値は、次の表に示す EPcxConnectionType 列挙型の値のいずれかです。

コネクタの種類
eConnTypeUnknown 不明
eConnTypeEighth (Windows Vista)

eConnType3Point5mm

(Windows 7)
1/8 インチジャック
eConnTypeQuarter 1/4 インチジャック
eConnTypeAtapiInternal ATAPI 内部コネクタ
eConnTypeRCA RCA ジャック
eConnTypeOptical 光コネクタ
eConnTypeOtherDigital 汎用デジタルコネクタ
eConnTypeOtherAnalog 汎用アナログコネクタ
eConnTypeMultichannelAnalogDIN マルチチャネルアナログ DIN コネクタ
eConnTypeXlrProfessional XLR コネクタ
eConnTypeRJ11Modem RJ11 モデムコネクタ
eConnTypeCombination 複数のコネクタ種類の組み合わせ
GeoLocationEPcxGeoLocation4+12+12

ジャックの幾何学的な位置。このメンバーの値は、次の表に示す EPcxGeoLocation 列挙型の値のいずれかです。

幾何学的な位置
eGeoLocRear 背面のパネル
eGeoLocFront 前面のパネル
eGeoLocLeft 左側面のパネル
eGeoLocRight 右側面のパネル
eGeoLocTop 上面のパネル
eGeoLocBottom 下面のパネル
eGeoLocRearOPanel(Windows Vista)

eGeoLocRearPanel(Windows 7)

背面のスライド式または引き出し式のパネル
eGeoLocRiser ライザーカード
eGeoLocInsideMobileLid モバイルコンピューターのふたの内側
eGeoLocDrivebay ドライブベイ
eGeoLocHDMI HDMI コネクタ
eGeoLocOutsideMobileLid モバイルコンピューターのふたの外側
eGeoLocATAPI ATAPI コネクタ
GenLocationEPcxGenLocation4+16+16

ジャックの全般的な位置。このメンバーの値は、次の表に示す EPcxGenLocation 列挙型の値のいずれかです。

全般的な位置
eGenLocPrimaryBox 主シャーシ上
eGenLocInternal 主シャーシの内部
eGenLocSeperate(Windows Vista)

eGenLocSeparate(Windows 7)

別のシャーシ上
eGenLocOther その他の位置
PortConnectionEPxcPortConnection4+20+20

ジャックが表すポートの種類。このメンバーの値は、次の表に示す EPxcPortConnection 列挙型の値のいずれかです。

ポート接続の種類
ePortConnJack ジャック
ePortConnIntegratedDevice 内蔵デバイス用のスロット
ePortConnBothIntegratedAndJack ジャックと内蔵デバイス用のスロットの両方
ePortConnUnknown 不明
IsConnectedBOOL4+24+24オーディオアダプターがそのジャックでのジャック挿入検出をサポートしている場合、IsConnected の値は、エンドポイントデバイスがジャックに接続されているかどうかを示します。IsConnectedTRUE の場合は、デバイスが接続されています。FALSE の場合、ジャックは空です。ジャック挿入検出をサポートしていないデバイスの場合、このメンバーは常に TRUE です。ジャック挿入検出の詳細については、Audio Endpoint Devices を参照してください。

公式ドキュメント

KSJACK_DESCRIPTION 構造体はオーディオジャックを記述します。

解説(Remarks)

この構造体は、DeviceTopology APIIKsJackDescription::GetJackDescription メソッドで使用されます。この構造体は、エンドポイントデバイスとオーディオアダプター内のハードウェアデバイスとの間の接続の一部を成すオーディオジャックを記述します。ユーザーがエンドポイントデバイスをジャックに接続したり、ジャックから取り外したりする必要がある場合、オーディオアプリケーションはこの構造体の説明情報を利用して、ユーザーが該当するジャックを見つけられるよう支援できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// KSJACK_DESCRIPTION  (x64 28 / x86 28 バイト)
typedef struct KSJACK_DESCRIPTION {
    DWORD ChannelMapping;
    DWORD Color;
    EPcxConnectionType ConnectionType;
    EPcxGeoLocation GeoLocation;
    EPcxGenLocation GenLocation;
    EPxcPortConnection PortConnection;
    BOOL IsConnected;
} KSJACK_DESCRIPTION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSJACK_DESCRIPTION
{
    public uint ChannelMapping;
    public uint Color;
    public int ConnectionType;
    public int GeoLocation;
    public int GenLocation;
    public int PortConnection;
    [MarshalAs(UnmanagedType.Bool)] public bool IsConnected;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSJACK_DESCRIPTION
    Public ChannelMapping As UInteger
    Public Color As UInteger
    Public ConnectionType As Integer
    Public GeoLocation As Integer
    Public GenLocation As Integer
    Public PortConnection As Integer
    <MarshalAs(UnmanagedType.Bool)> Public IsConnected As Boolean
End Structure
import ctypes
from ctypes import wintypes

class KSJACK_DESCRIPTION(ctypes.Structure):
    _fields_ = [
        ("ChannelMapping", wintypes.DWORD),
        ("Color", wintypes.DWORD),
        ("ConnectionType", ctypes.c_int),
        ("GeoLocation", ctypes.c_int),
        ("GenLocation", ctypes.c_int),
        ("PortConnection", ctypes.c_int),
        ("IsConnected", wintypes.BOOL),
    ]
#[repr(C)]
pub struct KSJACK_DESCRIPTION {
    pub ChannelMapping: u32,
    pub Color: u32,
    pub ConnectionType: i32,
    pub GeoLocation: i32,
    pub GenLocation: i32,
    pub PortConnection: i32,
    pub IsConnected: i32,
}
import "golang.org/x/sys/windows"

type KSJACK_DESCRIPTION struct {
	ChannelMapping uint32
	Color uint32
	ConnectionType int32
	GeoLocation int32
	GenLocation int32
	PortConnection int32
	IsConnected int32
}
type
  KSJACK_DESCRIPTION = record
    ChannelMapping: DWORD;
    Color: DWORD;
    ConnectionType: Integer;
    GeoLocation: Integer;
    GenLocation: Integer;
    PortConnection: Integer;
    IsConnected: BOOL;
  end;
const KSJACK_DESCRIPTION = extern struct {
    ChannelMapping: u32,
    Color: u32,
    ConnectionType: i32,
    GeoLocation: i32,
    GenLocation: i32,
    PortConnection: i32,
    IsConnected: i32,
};
type
  KSJACK_DESCRIPTION {.bycopy.} = object
    ChannelMapping: uint32
    Color: uint32
    ConnectionType: int32
    GeoLocation: int32
    GenLocation: int32
    PortConnection: int32
    IsConnected: int32
struct KSJACK_DESCRIPTION
{
    uint ChannelMapping;
    uint Color;
    int ConnectionType;
    int GeoLocation;
    int GenLocation;
    int PortConnection;
    int IsConnected;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSJACK_DESCRIPTION サイズ: 28 バイト(x64)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; ChannelMapping : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Color : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; ConnectionType : EPcxConnectionType (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; GeoLocation : EPcxGeoLocation (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; GenLocation : EPcxGenLocation (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; PortConnection : EPxcPortConnection (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; IsConnected : BOOL (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global KSJACK_DESCRIPTION
    #field int ChannelMapping
    #field int Color
    #field int ConnectionType
    #field int GeoLocation
    #field int GenLocation
    #field int PortConnection
    #field bool IsConnected
#endstruct

stdim st, KSJACK_DESCRIPTION        ; NSTRUCT 変数を確保
st->ChannelMapping = 100
mes "ChannelMapping=" + st->ChannelMapping