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

KSAUDIO_MIC_ARRAY_GEOMETRY

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

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

フィールド

フィールドサイズx64x86説明
usVersionWORD2+0+0マイクアレイ形状構造体のバージョン番号を示す。
usMicArrayTypeWORD2+2+2マイクアレイの種類(線形・平面・円形など)を示す。
wVerticalAngleBeginSHORT2+4+4作業領域の垂直方向の開始角度を度単位で表す。
wVerticalAngleEndSHORT2+6+6作業領域の垂直方向の終了角度を度単位で表す。
wHorizontalAngleBeginSHORT2+8+8作業領域の水平方向の開始角度を度単位で表す。
wHorizontalAngleEndSHORT2+10+10作業領域の水平方向の終了角度を度単位で表す。
usFrequencyBandLoWORD2+12+12対象周波数帯域の下限をHz単位で表す。
usFrequencyBandHiWORD2+14+14対象周波数帯域の上限をHz単位で表す。
usNumberOfMicrophonesWORD2+16+16アレイに含まれるマイクの個数を示す。
KsMicCoordKSAUDIO_MICROPHONE_COORDINATES12+18+18各マイクの座標情報を保持する可変長配列の先頭要素。

各言語での定義

#include <windows.h>

// KSAUDIO_MICROPHONE_COORDINATES  (x64 12 / x86 12 バイト)
typedef struct KSAUDIO_MICROPHONE_COORDINATES {
    WORD usType;
    SHORT wXCoord;
    SHORT wYCoord;
    SHORT wZCoord;
    SHORT wVerticalAngle;
    SHORT wHorizontalAngle;
} KSAUDIO_MICROPHONE_COORDINATES;

// KSAUDIO_MIC_ARRAY_GEOMETRY  (x64 30 / x86 30 バイト)
typedef struct KSAUDIO_MIC_ARRAY_GEOMETRY {
    WORD usVersion;
    WORD usMicArrayType;
    SHORT wVerticalAngleBegin;
    SHORT wVerticalAngleEnd;
    SHORT wHorizontalAngleBegin;
    SHORT wHorizontalAngleEnd;
    WORD usFrequencyBandLo;
    WORD usFrequencyBandHi;
    WORD usNumberOfMicrophones;
    KSAUDIO_MICROPHONE_COORDINATES KsMicCoord[1];
} KSAUDIO_MIC_ARRAY_GEOMETRY;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSAUDIO_MICROPHONE_COORDINATES
{
    public ushort usType;
    public short wXCoord;
    public short wYCoord;
    public short wZCoord;
    public short wVerticalAngle;
    public short wHorizontalAngle;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSAUDIO_MIC_ARRAY_GEOMETRY
{
    public ushort usVersion;
    public ushort usMicArrayType;
    public short wVerticalAngleBegin;
    public short wVerticalAngleEnd;
    public short wHorizontalAngleBegin;
    public short wHorizontalAngleEnd;
    public ushort usFrequencyBandLo;
    public ushort usFrequencyBandHi;
    public ushort usNumberOfMicrophones;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public KSAUDIO_MICROPHONE_COORDINATES[] KsMicCoord;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSAUDIO_MICROPHONE_COORDINATES
    Public usType As UShort
    Public wXCoord As Short
    Public wYCoord As Short
    Public wZCoord As Short
    Public wVerticalAngle As Short
    Public wHorizontalAngle As Short
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSAUDIO_MIC_ARRAY_GEOMETRY
    Public usVersion As UShort
    Public usMicArrayType As UShort
    Public wVerticalAngleBegin As Short
    Public wVerticalAngleEnd As Short
    Public wHorizontalAngleBegin As Short
    Public wHorizontalAngleEnd As Short
    Public usFrequencyBandLo As UShort
    Public usFrequencyBandHi As UShort
    Public usNumberOfMicrophones As UShort
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public KsMicCoord() As KSAUDIO_MICROPHONE_COORDINATES
End Structure
import ctypes
from ctypes import wintypes

class KSAUDIO_MICROPHONE_COORDINATES(ctypes.Structure):
    _fields_ = [
        ("usType", ctypes.c_ushort),
        ("wXCoord", ctypes.c_short),
        ("wYCoord", ctypes.c_short),
        ("wZCoord", ctypes.c_short),
        ("wVerticalAngle", ctypes.c_short),
        ("wHorizontalAngle", ctypes.c_short),
    ]

class KSAUDIO_MIC_ARRAY_GEOMETRY(ctypes.Structure):
    _fields_ = [
        ("usVersion", ctypes.c_ushort),
        ("usMicArrayType", ctypes.c_ushort),
        ("wVerticalAngleBegin", ctypes.c_short),
        ("wVerticalAngleEnd", ctypes.c_short),
        ("wHorizontalAngleBegin", ctypes.c_short),
        ("wHorizontalAngleEnd", ctypes.c_short),
        ("usFrequencyBandLo", ctypes.c_ushort),
        ("usFrequencyBandHi", ctypes.c_ushort),
        ("usNumberOfMicrophones", ctypes.c_ushort),
        ("KsMicCoord", KSAUDIO_MICROPHONE_COORDINATES * 1),
    ]
#[repr(C)]
pub struct KSAUDIO_MICROPHONE_COORDINATES {
    pub usType: u16,
    pub wXCoord: i16,
    pub wYCoord: i16,
    pub wZCoord: i16,
    pub wVerticalAngle: i16,
    pub wHorizontalAngle: i16,
}

#[repr(C)]
pub struct KSAUDIO_MIC_ARRAY_GEOMETRY {
    pub usVersion: u16,
    pub usMicArrayType: u16,
    pub wVerticalAngleBegin: i16,
    pub wVerticalAngleEnd: i16,
    pub wHorizontalAngleBegin: i16,
    pub wHorizontalAngleEnd: i16,
    pub usFrequencyBandLo: u16,
    pub usFrequencyBandHi: u16,
    pub usNumberOfMicrophones: u16,
    pub KsMicCoord: [KSAUDIO_MICROPHONE_COORDINATES; 1],
}
import "golang.org/x/sys/windows"

type KSAUDIO_MICROPHONE_COORDINATES struct {
	usType uint16
	wXCoord int16
	wYCoord int16
	wZCoord int16
	wVerticalAngle int16
	wHorizontalAngle int16
}

type KSAUDIO_MIC_ARRAY_GEOMETRY struct {
	usVersion uint16
	usMicArrayType uint16
	wVerticalAngleBegin int16
	wVerticalAngleEnd int16
	wHorizontalAngleBegin int16
	wHorizontalAngleEnd int16
	usFrequencyBandLo uint16
	usFrequencyBandHi uint16
	usNumberOfMicrophones uint16
	KsMicCoord [1]KSAUDIO_MICROPHONE_COORDINATES
}
type
  KSAUDIO_MICROPHONE_COORDINATES = record
    usType: Word;
    wXCoord: Smallint;
    wYCoord: Smallint;
    wZCoord: Smallint;
    wVerticalAngle: Smallint;
    wHorizontalAngle: Smallint;
  end;

  KSAUDIO_MIC_ARRAY_GEOMETRY = record
    usVersion: Word;
    usMicArrayType: Word;
    wVerticalAngleBegin: Smallint;
    wVerticalAngleEnd: Smallint;
    wHorizontalAngleBegin: Smallint;
    wHorizontalAngleEnd: Smallint;
    usFrequencyBandLo: Word;
    usFrequencyBandHi: Word;
    usNumberOfMicrophones: Word;
    KsMicCoord: array[0..0] of KSAUDIO_MICROPHONE_COORDINATES;
  end;
const KSAUDIO_MICROPHONE_COORDINATES = extern struct {
    usType: u16,
    wXCoord: i16,
    wYCoord: i16,
    wZCoord: i16,
    wVerticalAngle: i16,
    wHorizontalAngle: i16,
};

const KSAUDIO_MIC_ARRAY_GEOMETRY = extern struct {
    usVersion: u16,
    usMicArrayType: u16,
    wVerticalAngleBegin: i16,
    wVerticalAngleEnd: i16,
    wHorizontalAngleBegin: i16,
    wHorizontalAngleEnd: i16,
    usFrequencyBandLo: u16,
    usFrequencyBandHi: u16,
    usNumberOfMicrophones: u16,
    KsMicCoord: [1]KSAUDIO_MICROPHONE_COORDINATES,
};
type
  KSAUDIO_MICROPHONE_COORDINATES {.bycopy.} = object
    usType: uint16
    wXCoord: int16
    wYCoord: int16
    wZCoord: int16
    wVerticalAngle: int16
    wHorizontalAngle: int16

  KSAUDIO_MIC_ARRAY_GEOMETRY {.bycopy.} = object
    usVersion: uint16
    usMicArrayType: uint16
    wVerticalAngleBegin: int16
    wVerticalAngleEnd: int16
    wHorizontalAngleBegin: int16
    wHorizontalAngleEnd: int16
    usFrequencyBandLo: uint16
    usFrequencyBandHi: uint16
    usNumberOfMicrophones: uint16
    KsMicCoord: array[1, KSAUDIO_MICROPHONE_COORDINATES]
struct KSAUDIO_MICROPHONE_COORDINATES
{
    ushort usType;
    short wXCoord;
    short wYCoord;
    short wZCoord;
    short wVerticalAngle;
    short wHorizontalAngle;
}

struct KSAUDIO_MIC_ARRAY_GEOMETRY
{
    ushort usVersion;
    ushort usMicArrayType;
    short wVerticalAngleBegin;
    short wVerticalAngleEnd;
    short wHorizontalAngleBegin;
    short wHorizontalAngleEnd;
    ushort usFrequencyBandLo;
    ushort usFrequencyBandHi;
    ushort usNumberOfMicrophones;
    KSAUDIO_MICROPHONE_COORDINATES[1] KsMicCoord;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSAUDIO_MIC_ARRAY_GEOMETRY サイズ: 30 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 30 / 4 切り上げ)
; usVersion : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; usMicArrayType : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; wVerticalAngleBegin : SHORT (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wVerticalAngleEnd : SHORT (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; wHorizontalAngleBegin : SHORT (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; wHorizontalAngleEnd : SHORT (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; usFrequencyBandLo : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; usFrequencyBandHi : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; usNumberOfMicrophones : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; KsMicCoord : KSAUDIO_MICROPHONE_COORDINATES (+18, 12byte)  varptr(st)+18 を基点に操作(12byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global KSAUDIO_MICROPHONE_COORDINATES
    #field short usType
    #field short wXCoord
    #field short wYCoord
    #field short wZCoord
    #field short wVerticalAngle
    #field short wHorizontalAngle
#endstruct

#defstruct global KSAUDIO_MIC_ARRAY_GEOMETRY
    #field short usVersion
    #field short usMicArrayType
    #field short wVerticalAngleBegin
    #field short wVerticalAngleEnd
    #field short wHorizontalAngleBegin
    #field short wHorizontalAngleEnd
    #field short usFrequencyBandLo
    #field short usFrequencyBandHi
    #field short usNumberOfMicrophones
    #field KSAUDIO_MICROPHONE_COORDINATES KsMicCoord 1
#endstruct

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