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

AUDIO_STREAM_CONFIG_CAPS

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

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

フィールド

フィールドサイズx64x86説明
guidGUID16+0+0メディア種別のフォーマットを識別するGUIDを示す。
MinimumChannelsDWORD4+16+16サポートする最小チャンネル数を示す。
MaximumChannelsDWORD4+20+20サポートする最大チャンネル数を示す。
ChannelsGranularityDWORD4+24+24チャンネル数の刻み幅を示す。
MinimumBitsPerSampleDWORD4+28+28サポートする最小ビット深度を示す。
MaximumBitsPerSampleDWORD4+32+32サポートする最大ビット深度を示す。
BitsPerSampleGranularityDWORD4+36+36ビット深度の刻み幅を示す。
MinimumSampleFrequencyDWORD4+40+40サポートする最小サンプリング周波数をHzで示す。
MaximumSampleFrequencyDWORD4+44+44サポートする最大サンプリング周波数をHzで示す。
SampleFrequencyGranularityDWORD4+48+48サンプリング周波数の刻み幅をHzで示す。

各言語での定義

#include <windows.h>

// AUDIO_STREAM_CONFIG_CAPS  (x64 52 / x86 52 バイト)
typedef struct AUDIO_STREAM_CONFIG_CAPS {
    GUID guid;
    DWORD MinimumChannels;
    DWORD MaximumChannels;
    DWORD ChannelsGranularity;
    DWORD MinimumBitsPerSample;
    DWORD MaximumBitsPerSample;
    DWORD BitsPerSampleGranularity;
    DWORD MinimumSampleFrequency;
    DWORD MaximumSampleFrequency;
    DWORD SampleFrequencyGranularity;
} AUDIO_STREAM_CONFIG_CAPS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AUDIO_STREAM_CONFIG_CAPS
{
    public Guid guid;
    public uint MinimumChannels;
    public uint MaximumChannels;
    public uint ChannelsGranularity;
    public uint MinimumBitsPerSample;
    public uint MaximumBitsPerSample;
    public uint BitsPerSampleGranularity;
    public uint MinimumSampleFrequency;
    public uint MaximumSampleFrequency;
    public uint SampleFrequencyGranularity;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AUDIO_STREAM_CONFIG_CAPS
    Public guid As Guid
    Public MinimumChannels As UInteger
    Public MaximumChannels As UInteger
    Public ChannelsGranularity As UInteger
    Public MinimumBitsPerSample As UInteger
    Public MaximumBitsPerSample As UInteger
    Public BitsPerSampleGranularity As UInteger
    Public MinimumSampleFrequency As UInteger
    Public MaximumSampleFrequency As UInteger
    Public SampleFrequencyGranularity As UInteger
End Structure
import ctypes
from ctypes import wintypes

class AUDIO_STREAM_CONFIG_CAPS(ctypes.Structure):
    _fields_ = [
        ("guid", GUID),
        ("MinimumChannels", wintypes.DWORD),
        ("MaximumChannels", wintypes.DWORD),
        ("ChannelsGranularity", wintypes.DWORD),
        ("MinimumBitsPerSample", wintypes.DWORD),
        ("MaximumBitsPerSample", wintypes.DWORD),
        ("BitsPerSampleGranularity", wintypes.DWORD),
        ("MinimumSampleFrequency", wintypes.DWORD),
        ("MaximumSampleFrequency", wintypes.DWORD),
        ("SampleFrequencyGranularity", wintypes.DWORD),
    ]
#[repr(C)]
pub struct AUDIO_STREAM_CONFIG_CAPS {
    pub guid: GUID,
    pub MinimumChannels: u32,
    pub MaximumChannels: u32,
    pub ChannelsGranularity: u32,
    pub MinimumBitsPerSample: u32,
    pub MaximumBitsPerSample: u32,
    pub BitsPerSampleGranularity: u32,
    pub MinimumSampleFrequency: u32,
    pub MaximumSampleFrequency: u32,
    pub SampleFrequencyGranularity: u32,
}
import "golang.org/x/sys/windows"

type AUDIO_STREAM_CONFIG_CAPS struct {
	guid windows.GUID
	MinimumChannels uint32
	MaximumChannels uint32
	ChannelsGranularity uint32
	MinimumBitsPerSample uint32
	MaximumBitsPerSample uint32
	BitsPerSampleGranularity uint32
	MinimumSampleFrequency uint32
	MaximumSampleFrequency uint32
	SampleFrequencyGranularity uint32
}
type
  AUDIO_STREAM_CONFIG_CAPS = record
    guid: TGUID;
    MinimumChannels: DWORD;
    MaximumChannels: DWORD;
    ChannelsGranularity: DWORD;
    MinimumBitsPerSample: DWORD;
    MaximumBitsPerSample: DWORD;
    BitsPerSampleGranularity: DWORD;
    MinimumSampleFrequency: DWORD;
    MaximumSampleFrequency: DWORD;
    SampleFrequencyGranularity: DWORD;
  end;
const AUDIO_STREAM_CONFIG_CAPS = extern struct {
    guid: GUID,
    MinimumChannels: u32,
    MaximumChannels: u32,
    ChannelsGranularity: u32,
    MinimumBitsPerSample: u32,
    MaximumBitsPerSample: u32,
    BitsPerSampleGranularity: u32,
    MinimumSampleFrequency: u32,
    MaximumSampleFrequency: u32,
    SampleFrequencyGranularity: u32,
};
type
  AUDIO_STREAM_CONFIG_CAPS {.bycopy.} = object
    guid: GUID
    MinimumChannels: uint32
    MaximumChannels: uint32
    ChannelsGranularity: uint32
    MinimumBitsPerSample: uint32
    MaximumBitsPerSample: uint32
    BitsPerSampleGranularity: uint32
    MinimumSampleFrequency: uint32
    MaximumSampleFrequency: uint32
    SampleFrequencyGranularity: uint32
struct AUDIO_STREAM_CONFIG_CAPS
{
    GUID guid;
    uint MinimumChannels;
    uint MaximumChannels;
    uint ChannelsGranularity;
    uint MinimumBitsPerSample;
    uint MaximumBitsPerSample;
    uint BitsPerSampleGranularity;
    uint MinimumSampleFrequency;
    uint MaximumSampleFrequency;
    uint SampleFrequencyGranularity;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; AUDIO_STREAM_CONFIG_CAPS サイズ: 52 バイト(x64)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; guid : GUID (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; MinimumChannels : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; MaximumChannels : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ChannelsGranularity : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; MinimumBitsPerSample : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; MaximumBitsPerSample : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; BitsPerSampleGranularity : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; MinimumSampleFrequency : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; MaximumSampleFrequency : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; SampleFrequencyGranularity : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※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 AUDIO_STREAM_CONFIG_CAPS
    #field GUID guid
    #field int MinimumChannels
    #field int MaximumChannels
    #field int ChannelsGranularity
    #field int MinimumBitsPerSample
    #field int MaximumBitsPerSample
    #field int BitsPerSampleGranularity
    #field int MinimumSampleFrequency
    #field int MaximumSampleFrequency
    #field int SampleFrequencyGranularity
#endstruct

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