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オーディオサンプルであることを示すために MEDIATYPE_Audio が設定されます。
MinimumChannelsDWORD4+16+16チャンネル数の最小値です。
MaximumChannelsDWORD4+20+20チャンネル数の最大値です。
ChannelsGranularityDWORD4+24+24チャンネル数の粒度です。たとえば、フィルターはチャンネル数を 2 から 4 まで 2 刻みで指定することがあります。
MinimumBitsPerSampleDWORD4+28+281 サンプルあたりのビット数の最小値です。
MaximumBitsPerSampleDWORD4+32+321 サンプルあたりのビット数の最大値です。
BitsPerSampleGranularityDWORD4+36+361 サンプルあたりのビット数の粒度です。たとえば、フィルターは 1 サンプルあたり 8 ビットから 32 ビットまでを 8 刻みで指定することがあります。
MinimumSampleFrequencyDWORD4+40+40サンプリング周波数の最小値です。
MaximumSampleFrequencyDWORD4+44+44サンプリング周波数の最大値です。
SampleFrequencyGranularityDWORD4+48+48周波数の粒度です。たとえば、フィルターは 11025 Hz から 44100 Hz までを 11025 Hz 刻みで指定することがあります。

公式ドキュメント

[このページに関連する機能である DirectShow はレガシー機能です。この機能は MediaPlayerIMFMediaEngine、および Media Foundation でのオーディオ/ビデオキャプチャ に置き換えられています。これらの機能は Windows 10 および Windows 11 向けに最適化されています。Microsoft は、新しいコードでは可能な限り DirectShow ではなく MediaPlayerIMFMediaEngineMedia Foundation でのオーディオ/ビデオキャプチャ を使用することを強く推奨します。レガシー API を使用している既存のコードについても、可能であれば新しい API を使用するように書き換えることを推奨します。]

AUDIO_STREAM_CONFIG_CAPS 構造体は、オーディオ形式の範囲を記述します。オーディオの圧縮フィルターおよびキャプチャフィルターは、この構造体を使用して自身が生成できる形式を記述します。

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

各言語での定義

#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