ホーム › Media.KernelStreaming › KSAUDIO_PACKETSIZE_CONSTRAINTS2
KSAUDIO_PACKETSIZE_CONSTRAINTS2
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| MinPacketPeriodInHns | DWORD | 4 | +0 | +0 | パケットの最小周期を100ナノ秒(HNS)単位で表す。 |
| PacketSizeFileAlignment | DWORD | 4 | +4 | +4 | パケットサイズに要求されるアライメント境界をバイト単位で示す。 |
| MaxPacketSizeInBytes | DWORD | 4 | +8 | +8 | 1パケットの最大サイズをバイト単位で示す。 |
| NumProcessingModeConstraints | DWORD | 4 | +12 | +12 | 後続の処理モード制約配列の要素数を示す。 |
| ProcessingModeConstraints | KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT | 24 | +16 | +16 | 処理モードごとのパケットサイズ制約を表す可変長配列の先頭要素。 |
各言語での定義
#include <windows.h>
// KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT (x64 24 / x86 24 バイト)
typedef struct KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT {
GUID ProcessingMode;
DWORD SamplesPerProcessingPacket;
DWORD ProcessingPacketDurationInHns;
} KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT;
// KSAUDIO_PACKETSIZE_CONSTRAINTS2 (x64 40 / x86 40 バイト)
typedef struct KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
DWORD MinPacketPeriodInHns;
DWORD PacketSizeFileAlignment;
DWORD MaxPacketSizeInBytes;
DWORD NumProcessingModeConstraints;
KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT ProcessingModeConstraints[1];
} KSAUDIO_PACKETSIZE_CONSTRAINTS2;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT
{
public Guid ProcessingMode;
public uint SamplesPerProcessingPacket;
public uint ProcessingPacketDurationInHns;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSAUDIO_PACKETSIZE_CONSTRAINTS2
{
public uint MinPacketPeriodInHns;
public uint PacketSizeFileAlignment;
public uint MaxPacketSizeInBytes;
public uint NumProcessingModeConstraints;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT[] ProcessingModeConstraints;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT
Public ProcessingMode As Guid
Public SamplesPerProcessingPacket As UInteger
Public ProcessingPacketDurationInHns As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSAUDIO_PACKETSIZE_CONSTRAINTS2
Public MinPacketPeriodInHns As UInteger
Public PacketSizeFileAlignment As UInteger
Public MaxPacketSizeInBytes As UInteger
Public NumProcessingModeConstraints As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public ProcessingModeConstraints() As KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT
End Structureimport ctypes
from ctypes import wintypes
class KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT(ctypes.Structure):
_fields_ = [
("ProcessingMode", GUID),
("SamplesPerProcessingPacket", wintypes.DWORD),
("ProcessingPacketDurationInHns", wintypes.DWORD),
]
class KSAUDIO_PACKETSIZE_CONSTRAINTS2(ctypes.Structure):
_fields_ = [
("MinPacketPeriodInHns", wintypes.DWORD),
("PacketSizeFileAlignment", wintypes.DWORD),
("MaxPacketSizeInBytes", wintypes.DWORD),
("NumProcessingModeConstraints", wintypes.DWORD),
("ProcessingModeConstraints", KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT * 1),
]#[repr(C)]
pub struct KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT {
pub ProcessingMode: GUID,
pub SamplesPerProcessingPacket: u32,
pub ProcessingPacketDurationInHns: u32,
}
#[repr(C)]
pub struct KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
pub MinPacketPeriodInHns: u32,
pub PacketSizeFileAlignment: u32,
pub MaxPacketSizeInBytes: u32,
pub NumProcessingModeConstraints: u32,
pub ProcessingModeConstraints: [KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT; 1],
}import "golang.org/x/sys/windows"
type KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT struct {
ProcessingMode windows.GUID
SamplesPerProcessingPacket uint32
ProcessingPacketDurationInHns uint32
}
type KSAUDIO_PACKETSIZE_CONSTRAINTS2 struct {
MinPacketPeriodInHns uint32
PacketSizeFileAlignment uint32
MaxPacketSizeInBytes uint32
NumProcessingModeConstraints uint32
ProcessingModeConstraints [1]KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT
}type
KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT = record
ProcessingMode: TGUID;
SamplesPerProcessingPacket: DWORD;
ProcessingPacketDurationInHns: DWORD;
end;
KSAUDIO_PACKETSIZE_CONSTRAINTS2 = record
MinPacketPeriodInHns: DWORD;
PacketSizeFileAlignment: DWORD;
MaxPacketSizeInBytes: DWORD;
NumProcessingModeConstraints: DWORD;
ProcessingModeConstraints: array[0..0] of KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT;
end;const KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT = extern struct {
ProcessingMode: GUID,
SamplesPerProcessingPacket: u32,
ProcessingPacketDurationInHns: u32,
};
const KSAUDIO_PACKETSIZE_CONSTRAINTS2 = extern struct {
MinPacketPeriodInHns: u32,
PacketSizeFileAlignment: u32,
MaxPacketSizeInBytes: u32,
NumProcessingModeConstraints: u32,
ProcessingModeConstraints: [1]KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT,
};type
KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT {.bycopy.} = object
ProcessingMode: GUID
SamplesPerProcessingPacket: uint32
ProcessingPacketDurationInHns: uint32
KSAUDIO_PACKETSIZE_CONSTRAINTS2 {.bycopy.} = object
MinPacketPeriodInHns: uint32
PacketSizeFileAlignment: uint32
MaxPacketSizeInBytes: uint32
NumProcessingModeConstraints: uint32
ProcessingModeConstraints: array[1, KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT]struct KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT
{
GUID ProcessingMode;
uint SamplesPerProcessingPacket;
uint ProcessingPacketDurationInHns;
}
struct KSAUDIO_PACKETSIZE_CONSTRAINTS2
{
uint MinPacketPeriodInHns;
uint PacketSizeFileAlignment;
uint MaxPacketSizeInBytes;
uint NumProcessingModeConstraints;
KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT[1] ProcessingModeConstraints;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSAUDIO_PACKETSIZE_CONSTRAINTS2 サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; MinPacketPeriodInHns : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; PacketSizeFileAlignment : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; MaxPacketSizeInBytes : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; NumProcessingModeConstraints : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ProcessingModeConstraints : KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT (+16, 24byte) varptr(st)+16 を基点に操作(24byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT
#field GUID ProcessingMode
#field int SamplesPerProcessingPacket
#field int ProcessingPacketDurationInHns
#endstruct
#defstruct global KSAUDIO_PACKETSIZE_CONSTRAINTS2
#field int MinPacketPeriodInHns
#field int PacketSizeFileAlignment
#field int MaxPacketSizeInBytes
#field int NumProcessingModeConstraints
#field KSAUDIO_PACKETSIZE_PROCESSINGMODE_CONSTRAINT ProcessingModeConstraints 1
#endstruct
stdim st, KSAUDIO_PACKETSIZE_CONSTRAINTS2 ; NSTRUCT 変数を確保
st->MinPacketPeriodInHns = 100
mes "MinPacketPeriodInHns=" + st->MinPacketPeriodInHns