ホーム › System.RemoteDesktop › AE_CURRENT_POSITION
AE_CURRENT_POSITION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| u64DevicePosition | ULONGLONG | 8 | +0 | +0 | オーディオデバイス上の現在位置。フレーム数で表す。 |
| u64StreamPosition | ULONGLONG | 8 | +8 | +8 | ストリーム上の現在位置。フレーム数で表す。 |
| u64PaddingFrames | ULONGLONG | 8 | +16 | +16 | パディングとして埋められたフレーム数。 |
| hnsQPCPosition | LONGLONG | 8 | +24 | +24 | 位置取得時のQPCタイムスタンプ。100ns単位で表す。 |
| f32FramesPerSecond | FLOAT | 4 | +32 | +32 | 1秒あたりのフレーム数(サンプルレート)。 |
| Flag | AE_POSITION_FLAGS | 4 | +36 | +36 | 位置情報の有効性を示すフラグの列挙値。 |
各言語での定義
#include <windows.h>
// AE_CURRENT_POSITION (x64 40 / x86 40 バイト)
typedef struct AE_CURRENT_POSITION {
ULONGLONG u64DevicePosition;
ULONGLONG u64StreamPosition;
ULONGLONG u64PaddingFrames;
LONGLONG hnsQPCPosition;
FLOAT f32FramesPerSecond;
AE_POSITION_FLAGS Flag;
} AE_CURRENT_POSITION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct AE_CURRENT_POSITION
{
public ulong u64DevicePosition;
public ulong u64StreamPosition;
public ulong u64PaddingFrames;
public long hnsQPCPosition;
public float f32FramesPerSecond;
public int Flag;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure AE_CURRENT_POSITION
Public u64DevicePosition As ULong
Public u64StreamPosition As ULong
Public u64PaddingFrames As ULong
Public hnsQPCPosition As Long
Public f32FramesPerSecond As Single
Public Flag As Integer
End Structureimport ctypes
from ctypes import wintypes
class AE_CURRENT_POSITION(ctypes.Structure):
_fields_ = [
("u64DevicePosition", ctypes.c_ulonglong),
("u64StreamPosition", ctypes.c_ulonglong),
("u64PaddingFrames", ctypes.c_ulonglong),
("hnsQPCPosition", ctypes.c_longlong),
("f32FramesPerSecond", ctypes.c_float),
("Flag", ctypes.c_int),
]#[repr(C)]
pub struct AE_CURRENT_POSITION {
pub u64DevicePosition: u64,
pub u64StreamPosition: u64,
pub u64PaddingFrames: u64,
pub hnsQPCPosition: i64,
pub f32FramesPerSecond: f32,
pub Flag: i32,
}import "golang.org/x/sys/windows"
type AE_CURRENT_POSITION struct {
u64DevicePosition uint64
u64StreamPosition uint64
u64PaddingFrames uint64
hnsQPCPosition int64
f32FramesPerSecond float32
Flag int32
}type
AE_CURRENT_POSITION = record
u64DevicePosition: UInt64;
u64StreamPosition: UInt64;
u64PaddingFrames: UInt64;
hnsQPCPosition: Int64;
f32FramesPerSecond: Single;
Flag: Integer;
end;const AE_CURRENT_POSITION = extern struct {
u64DevicePosition: u64,
u64StreamPosition: u64,
u64PaddingFrames: u64,
hnsQPCPosition: i64,
f32FramesPerSecond: f32,
Flag: i32,
};type
AE_CURRENT_POSITION {.bycopy.} = object
u64DevicePosition: uint64
u64StreamPosition: uint64
u64PaddingFrames: uint64
hnsQPCPosition: int64
f32FramesPerSecond: float32
Flag: int32struct AE_CURRENT_POSITION
{
ulong u64DevicePosition;
ulong u64StreamPosition;
ulong u64PaddingFrames;
long hnsQPCPosition;
float f32FramesPerSecond;
int Flag;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; AE_CURRENT_POSITION サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; u64DevicePosition : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; u64StreamPosition : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; u64PaddingFrames : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; hnsQPCPosition : LONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; f32FramesPerSecond : FLOAT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; Flag : AE_POSITION_FLAGS (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global AE_CURRENT_POSITION
#field int64 u64DevicePosition
#field int64 u64StreamPosition
#field int64 u64PaddingFrames
#field int64 hnsQPCPosition
#field float f32FramesPerSecond
#field int Flag
#endstruct
stdim st, AE_CURRENT_POSITION ; NSTRUCT 変数を確保
st->u64DevicePosition = 100
mes "u64DevicePosition=" + st->u64DevicePosition