ホーム › Media.Audio.XAudio2 › XAUDIO2_BUFFER
XAUDIO2_BUFFER
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Flags | DWORD | 4 | +0 | +0 | バッファに関するフラグ(XAUDIO2_END_OF_STREAM等)を示す。 |
| AudioBytes | DWORD | 4 | +4 | +4 | pAudioDataが指すオーディオデータのサイズをバイト単位で示す。 |
| pAudioData | BYTE* | 8/4 | +8 | +8 | 再生するオーディオデータを格納するバッファへのポインター。 |
| PlayBegin | DWORD | 4 | +16 | +12 | 再生を開始するサンプル位置を示す。0で先頭となる。 |
| PlayLength | DWORD | 4 | +20 | +16 | 再生するサンプル数を示す。0でバッファ末尾までとなる。 |
| LoopBegin | DWORD | 4 | +24 | +20 | ループ開始のサンプル位置を示す。 |
| LoopLength | DWORD | 4 | +28 | +24 | ループ区間のサンプル数を示す。 |
| LoopCount | DWORD | 4 | +32 | +28 | ループ回数を示す。XAUDIO2_LOOP_INFINITEで無限ループとなる。 |
| pContext | void* | 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 Structureimport 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: pointeralign(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