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

KSAUDIO_MICROPHONE_COORDINATES

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

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

フィールド

フィールドサイズx64x86説明
usTypeWORD2+0+0マイクの種類を示すKSMICARRAY_MICTYPE値である。
wXCoordSHORT2+2+2マイクのX座標をミリメートル単位で表す。
wYCoordSHORT2+4+4マイクのY座標をミリメートル単位で表す。
wZCoordSHORT2+6+6マイクのZ座標をミリメートル単位で表す。
wVerticalAngleSHORT2+8+8マイクの垂直方向の向き角度を度単位で表す。
wHorizontalAngleSHORT2+10+10マイクの水平方向の向き角度を度単位で表す。

各言語での定義

#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;
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;
}
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
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),
    ]
#[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,
}
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_MICROPHONE_COORDINATES = record
    usType: Word;
    wXCoord: Smallint;
    wYCoord: Smallint;
    wZCoord: Smallint;
    wVerticalAngle: Smallint;
    wHorizontalAngle: Smallint;
  end;
const KSAUDIO_MICROPHONE_COORDINATES = extern struct {
    usType: u16,
    wXCoord: i16,
    wYCoord: i16,
    wZCoord: i16,
    wVerticalAngle: i16,
    wHorizontalAngle: i16,
};
type
  KSAUDIO_MICROPHONE_COORDINATES {.bycopy.} = object
    usType: uint16
    wXCoord: int16
    wYCoord: int16
    wZCoord: int16
    wVerticalAngle: int16
    wHorizontalAngle: int16
struct KSAUDIO_MICROPHONE_COORDINATES
{
    ushort usType;
    short wXCoord;
    short wYCoord;
    short wZCoord;
    short wVerticalAngle;
    short wHorizontalAngle;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSAUDIO_MICROPHONE_COORDINATES サイズ: 12 バイト(x64)
dim st, 3    ; 4byte整数×3(構造体サイズ 12 / 4 切り上げ)
; usType : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; wXCoord : SHORT (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; wYCoord : SHORT (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wZCoord : SHORT (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; wVerticalAngle : SHORT (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; wHorizontalAngle : SHORT (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global KSAUDIO_MICROPHONE_COORDINATES
    #field short usType
    #field short wXCoord
    #field short wYCoord
    #field short wZCoord
    #field short wVerticalAngle
    #field short wHorizontalAngle
#endstruct

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