ホーム › Media.Speech › SPPARSEINFO
SPPARSEINFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のサイズをバイトで示す。 |
| hRule | SPRULEHANDLE | 8/4 | +8 | +4 | 解析に使われたルールのハンドル(SPRULEHANDLE)。 |
| ullAudioStreamPosition | ULONGLONG | 8 | +16 | +8 | 解析対象音声の開始位置をストリームバイトオフセットで示す。 |
| ulAudioSize | DWORD | 4 | +24 | +16 | 解析対象音声のバイト数。 |
| cTransitions | DWORD | 4 | +28 | +20 | 解析経路の遷移数。 |
| pPath | SPPATHENTRY* | 8/4 | +32 | +24 | 解析経路エントリ(SPPATHENTRY)配列へのポインタ。 |
| SREngineID | GUID | 16 | +40 | +28 | 認識エンジンを識別するGUID。 |
| ulSREnginePrivateDataSize | DWORD | 4 | +56 | +44 | エンジン固有データのバイト数。 |
| pSREnginePrivateData | BYTE* | 8/4 | +64 | +48 | エンジン固有データへのポインタ。NULL可。 |
| fHypothesis | BOOL | 4 | +72 | +52 | 暫定(仮説)結果ならTRUEとなる真偽値。 |
各言語での定義
#include <windows.h>
// SPPARSEINFO (x64 80 / x86 56 バイト)
typedef struct SPPARSEINFO {
DWORD cbSize;
SPRULEHANDLE hRule;
ULONGLONG ullAudioStreamPosition;
DWORD ulAudioSize;
DWORD cTransitions;
SPPATHENTRY* pPath;
GUID SREngineID;
DWORD ulSREnginePrivateDataSize;
BYTE* pSREnginePrivateData;
BOOL fHypothesis;
} SPPARSEINFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SPPARSEINFO
{
public uint cbSize;
public IntPtr hRule;
public ulong ullAudioStreamPosition;
public uint ulAudioSize;
public uint cTransitions;
public IntPtr pPath;
public Guid SREngineID;
public uint ulSREnginePrivateDataSize;
public IntPtr pSREnginePrivateData;
[MarshalAs(UnmanagedType.Bool)] public bool fHypothesis;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SPPARSEINFO
Public cbSize As UInteger
Public hRule As IntPtr
Public ullAudioStreamPosition As ULong
Public ulAudioSize As UInteger
Public cTransitions As UInteger
Public pPath As IntPtr
Public SREngineID As Guid
Public ulSREnginePrivateDataSize As UInteger
Public pSREnginePrivateData As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public fHypothesis As Boolean
End Structureimport ctypes
from ctypes import wintypes
class SPPARSEINFO(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("hRule", ctypes.c_void_p),
("ullAudioStreamPosition", ctypes.c_ulonglong),
("ulAudioSize", wintypes.DWORD),
("cTransitions", wintypes.DWORD),
("pPath", ctypes.c_void_p),
("SREngineID", GUID),
("ulSREnginePrivateDataSize", wintypes.DWORD),
("pSREnginePrivateData", ctypes.c_void_p),
("fHypothesis", wintypes.BOOL),
]#[repr(C)]
pub struct SPPARSEINFO {
pub cbSize: u32,
pub hRule: *mut core::ffi::c_void,
pub ullAudioStreamPosition: u64,
pub ulAudioSize: u32,
pub cTransitions: u32,
pub pPath: *mut core::ffi::c_void,
pub SREngineID: GUID,
pub ulSREnginePrivateDataSize: u32,
pub pSREnginePrivateData: *mut core::ffi::c_void,
pub fHypothesis: i32,
}import "golang.org/x/sys/windows"
type SPPARSEINFO struct {
cbSize uint32
hRule uintptr
ullAudioStreamPosition uint64
ulAudioSize uint32
cTransitions uint32
pPath uintptr
SREngineID windows.GUID
ulSREnginePrivateDataSize uint32
pSREnginePrivateData uintptr
fHypothesis int32
}type
SPPARSEINFO = record
cbSize: DWORD;
hRule: Pointer;
ullAudioStreamPosition: UInt64;
ulAudioSize: DWORD;
cTransitions: DWORD;
pPath: Pointer;
SREngineID: TGUID;
ulSREnginePrivateDataSize: DWORD;
pSREnginePrivateData: Pointer;
fHypothesis: BOOL;
end;const SPPARSEINFO = extern struct {
cbSize: u32,
hRule: ?*anyopaque,
ullAudioStreamPosition: u64,
ulAudioSize: u32,
cTransitions: u32,
pPath: ?*anyopaque,
SREngineID: GUID,
ulSREnginePrivateDataSize: u32,
pSREnginePrivateData: ?*anyopaque,
fHypothesis: i32,
};type
SPPARSEINFO {.bycopy.} = object
cbSize: uint32
hRule: pointer
ullAudioStreamPosition: uint64
ulAudioSize: uint32
cTransitions: uint32
pPath: pointer
SREngineID: GUID
ulSREnginePrivateDataSize: uint32
pSREnginePrivateData: pointer
fHypothesis: int32struct SPPARSEINFO
{
uint cbSize;
void* hRule;
ulong ullAudioStreamPosition;
uint ulAudioSize;
uint cTransitions;
void* pPath;
GUID SREngineID;
uint ulSREnginePrivateDataSize;
void* pSREnginePrivateData;
int fHypothesis;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SPPARSEINFO サイズ: 56 バイト(x86)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hRule : SPRULEHANDLE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ullAudioStreamPosition : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ulAudioSize : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; cTransitions : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pPath : SPPATHENTRY* (+24, 4byte) varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; SREngineID : GUID (+28, 16byte) varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; ulSREnginePrivateDataSize : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; pSREnginePrivateData : BYTE* (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; fHypothesis : BOOL (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SPPARSEINFO サイズ: 80 バイト(x64)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hRule : SPRULEHANDLE (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ullAudioStreamPosition : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ulAudioSize : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; cTransitions : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pPath : SPPATHENTRY* (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; SREngineID : GUID (+40, 16byte) varptr(st)+40 を基点に操作(16byte:入れ子/配列)
; ulSREnginePrivateDataSize : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pSREnginePrivateData : BYTE* (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; fHypothesis : BOOL (+72, 4byte) st.18 = 値 / 値 = st.18 (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 SPPARSEINFO
#field int cbSize
#field intptr hRule
#field int64 ullAudioStreamPosition
#field int ulAudioSize
#field int cTransitions
#field intptr pPath
#field GUID SREngineID
#field int ulSREnginePrivateDataSize
#field intptr pSREnginePrivateData
#field bool fHypothesis
#endstruct
stdim st, SPPARSEINFO ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize