Win32 API 日本語リファレンス
ホームMedia.Audio.XAudio2 › XAUDIO2_BUFFER

XAUDIO2_BUFFER

構造体
サイズx64: 44 バイト / x86: 36 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
FlagsDWORD4+0+0バッファに関するフラグ(XAUDIO2_END_OF_STREAM等)を示す。
AudioBytesDWORD4+4+4pAudioDataが指すオーディオデータのサイズをバイト単位で示す。
pAudioDataBYTE*8/4+8+8再生するオーディオデータを格納するバッファへのポインター。
PlayBeginDWORD4+16+12再生を開始するサンプル位置を示す。0で先頭となる。
PlayLengthDWORD4+20+16再生するサンプル数を示す。0でバッファ末尾までとなる。
LoopBeginDWORD4+24+20ループ開始のサンプル位置を示す。
LoopLengthDWORD4+28+24ループ区間のサンプル数を示す。
LoopCountDWORD4+32+28ループ回数を示す。XAUDIO2_LOOP_INFINITEで無限ループとなる。
pContextvoid*8/4+36+32コールバックに渡されるアプリ定義のコンテキストデータ。NULL可。

各言語での定義

#include <windows.h>

// XAUDIO2_BUFFER  (x64 44 / x86 36 バイト)
#pragma pack(push, 1)
typedef struct XAUDIO2_BUFFER {
    DWORD Flags;
    DWORD AudioBytes;
    BYTE* pAudioData;
    DWORD PlayBegin;
    DWORD PlayLength;
    DWORD LoopBegin;
    DWORD LoopLength;
    DWORD LoopCount;
    void* pContext;
} XAUDIO2_BUFFER;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct XAUDIO2_BUFFER
{
    public uint Flags;
    public uint AudioBytes;
    public IntPtr pAudioData;
    public uint PlayBegin;
    public uint PlayLength;
    public uint LoopBegin;
    public uint LoopLength;
    public uint LoopCount;
    public IntPtr pContext;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure XAUDIO2_BUFFER
    Public Flags As UInteger
    Public AudioBytes As UInteger
    Public pAudioData As IntPtr
    Public PlayBegin As UInteger
    Public PlayLength As UInteger
    Public LoopBegin As UInteger
    Public LoopLength As UInteger
    Public LoopCount As UInteger
    Public pContext As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class XAUDIO2_BUFFER(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("Flags", wintypes.DWORD),
        ("AudioBytes", wintypes.DWORD),
        ("pAudioData", ctypes.c_void_p),
        ("PlayBegin", wintypes.DWORD),
        ("PlayLength", wintypes.DWORD),
        ("LoopBegin", wintypes.DWORD),
        ("LoopLength", wintypes.DWORD),
        ("LoopCount", wintypes.DWORD),
        ("pContext", ctypes.c_void_p),
    ]
#[repr(C, packed(1))]
pub struct XAUDIO2_BUFFER {
    pub Flags: u32,
    pub AudioBytes: u32,
    pub pAudioData: *mut core::ffi::c_void,
    pub PlayBegin: u32,
    pub PlayLength: u32,
    pub LoopBegin: u32,
    pub LoopLength: u32,
    pub LoopCount: u32,
    pub pContext: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type XAUDIO2_BUFFER struct {
	Flags uint32
	AudioBytes uint32
	pAudioData uintptr
	PlayBegin uint32
	PlayLength uint32
	LoopBegin uint32
	LoopLength uint32
	LoopCount uint32
	pContext uintptr
}
type
  XAUDIO2_BUFFER = packed record
    Flags: DWORD;
    AudioBytes: DWORD;
    pAudioData: Pointer;
    PlayBegin: DWORD;
    PlayLength: DWORD;
    LoopBegin: DWORD;
    LoopLength: DWORD;
    LoopCount: DWORD;
    pContext: Pointer;
  end;
const XAUDIO2_BUFFER = extern struct {
    Flags: u32,
    AudioBytes: u32,
    pAudioData: ?*anyopaque,
    PlayBegin: u32,
    PlayLength: u32,
    LoopBegin: u32,
    LoopLength: u32,
    LoopCount: u32,
    pContext: ?*anyopaque,
};
type
  XAUDIO2_BUFFER {.packed.} = object
    Flags: uint32
    AudioBytes: uint32
    pAudioData: pointer
    PlayBegin: uint32
    PlayLength: uint32
    LoopBegin: uint32
    LoopLength: uint32
    LoopCount: uint32
    pContext: pointer
align(1)
struct XAUDIO2_BUFFER
{
    uint Flags;
    uint AudioBytes;
    void* pAudioData;
    uint PlayBegin;
    uint PlayLength;
    uint LoopBegin;
    uint LoopLength;
    uint LoopCount;
    void* pContext;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; XAUDIO2_BUFFER サイズ: 36 バイト(x86)
dim st, 9    ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; Flags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; AudioBytes : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pAudioData : BYTE* (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; PlayBegin : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; PlayLength : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; LoopBegin : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; LoopLength : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; LoopCount : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pContext : void* (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; XAUDIO2_BUFFER サイズ: 44 バイト(x64)
dim st, 11    ; 4byte整数×11(構造体サイズ 44 / 4 切り上げ)
; Flags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; AudioBytes : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pAudioData : BYTE* (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; PlayBegin : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; PlayLength : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; LoopBegin : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; LoopLength : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; LoopCount : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pContext : void* (+36, 8byte)  qpoke st,36,値 / qpeek(st,36)  ※IronHSPのみ。3.7/3.8は lpoke st,36,下位 : lpoke st,40,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global XAUDIO2_BUFFER, pack=1
    #field int Flags
    #field int AudioBytes
    #field intptr pAudioData
    #field int PlayBegin
    #field int PlayLength
    #field int LoopBegin
    #field int LoopLength
    #field int LoopCount
    #field intptr pContext
#endstruct

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