Win32 API 日本語リファレンス
ホームMedia.Speech › SPPHRASE_50

SPPHRASE_50

構造体
サイズx64: 160 バイト / x86: 120 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズをバイトで示す。
LangIDWORD2+4+4認識結果の言語ID(LANGID)。
wHomophoneGroupIdWORD2+6+6同音異義語グループの識別子。
ullGrammarIDULONGLONG8+8+8認識に使われた文法の識別子。
ftStartTimeULONGLONG8+16+16フレーズの開始時刻(FILETIME相当の64ビット値)。
ullAudioStreamPositionULONGLONG8+24+24フレーズ開始位置の音声ストリームバイトオフセット。
ulAudioSizeBytesDWORD4+32+32フレーズ全体の音声データのバイト数。
ulRetainedSizeBytesDWORD4+36+36保持された音声データのバイト数。
ulAudioSizeTimeDWORD4+40+40フレーズの音声長を時間(100ナノ秒単位)で示す。
RuleSPPHRASERULE48/32+48+44フレーズのルート文法ルール(SPPHRASERULE)。
pPropertiesSPPHRASEPROPERTY*8/4+96+76セマンティックプロパティ配列へのポインタ。無ければNULL。
pElementsSPPHRASEELEMENT*8/4+104+80フレーズを構成する要素(単語)配列へのポインタ。
cReplacementsDWORD4+112+84置換(正規化)エントリの数。
pReplacementsSPPHRASEREPLACEMENT*8/4+120+88置換エントリ配列へのポインタ。無ければNULL。
SREngineIDGUID16+128+92認識エンジンを識別するGUID。
ulSREnginePrivateDataSizeDWORD4+144+108エンジン固有データのバイト数。
pSREnginePrivateDataBYTE*8/4+152+112エンジン固有データへのポインタ。無ければNULL。

各言語での定義

#include <windows.h>

// SPPHRASERULE  (x64 48 / x86 32 バイト)
typedef struct SPPHRASERULE {
    LPWSTR pszName;
    DWORD ulId;
    DWORD ulFirstElement;
    DWORD ulCountOfElements;
    SPPHRASERULE* pNextSibling;
    SPPHRASERULE* pFirstChild;
    FLOAT SREngineConfidence;
    CHAR Confidence;
} SPPHRASERULE;

// SPPHRASE_50  (x64 160 / x86 120 バイト)
typedef struct SPPHRASE_50 {
    DWORD cbSize;
    WORD LangID;
    WORD wHomophoneGroupId;
    ULONGLONG ullGrammarID;
    ULONGLONG ftStartTime;
    ULONGLONG ullAudioStreamPosition;
    DWORD ulAudioSizeBytes;
    DWORD ulRetainedSizeBytes;
    DWORD ulAudioSizeTime;
    SPPHRASERULE Rule;
    SPPHRASEPROPERTY* pProperties;
    SPPHRASEELEMENT* pElements;
    DWORD cReplacements;
    SPPHRASEREPLACEMENT* pReplacements;
    GUID SREngineID;
    DWORD ulSREnginePrivateDataSize;
    BYTE* pSREnginePrivateData;
} SPPHRASE_50;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SPPHRASERULE
{
    public IntPtr pszName;
    public uint ulId;
    public uint ulFirstElement;
    public uint ulCountOfElements;
    public IntPtr pNextSibling;
    public IntPtr pFirstChild;
    public float SREngineConfidence;
    public sbyte Confidence;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SPPHRASE_50
{
    public uint cbSize;
    public ushort LangID;
    public ushort wHomophoneGroupId;
    public ulong ullGrammarID;
    public ulong ftStartTime;
    public ulong ullAudioStreamPosition;
    public uint ulAudioSizeBytes;
    public uint ulRetainedSizeBytes;
    public uint ulAudioSizeTime;
    public SPPHRASERULE Rule;
    public IntPtr pProperties;
    public IntPtr pElements;
    public uint cReplacements;
    public IntPtr pReplacements;
    public Guid SREngineID;
    public uint ulSREnginePrivateDataSize;
    public IntPtr pSREnginePrivateData;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SPPHRASERULE
    Public pszName As IntPtr
    Public ulId As UInteger
    Public ulFirstElement As UInteger
    Public ulCountOfElements As UInteger
    Public pNextSibling As IntPtr
    Public pFirstChild As IntPtr
    Public SREngineConfidence As Single
    Public Confidence As SByte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SPPHRASE_50
    Public cbSize As UInteger
    Public LangID As UShort
    Public wHomophoneGroupId As UShort
    Public ullGrammarID As ULong
    Public ftStartTime As ULong
    Public ullAudioStreamPosition As ULong
    Public ulAudioSizeBytes As UInteger
    Public ulRetainedSizeBytes As UInteger
    Public ulAudioSizeTime As UInteger
    Public Rule As SPPHRASERULE
    Public pProperties As IntPtr
    Public pElements As IntPtr
    Public cReplacements As UInteger
    Public pReplacements As IntPtr
    Public SREngineID As Guid
    Public ulSREnginePrivateDataSize As UInteger
    Public pSREnginePrivateData As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class SPPHRASERULE(ctypes.Structure):
    _fields_ = [
        ("pszName", ctypes.c_void_p),
        ("ulId", wintypes.DWORD),
        ("ulFirstElement", wintypes.DWORD),
        ("ulCountOfElements", wintypes.DWORD),
        ("pNextSibling", ctypes.c_void_p),
        ("pFirstChild", ctypes.c_void_p),
        ("SREngineConfidence", ctypes.c_float),
        ("Confidence", ctypes.c_byte),
    ]

class SPPHRASE_50(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("LangID", ctypes.c_ushort),
        ("wHomophoneGroupId", ctypes.c_ushort),
        ("ullGrammarID", ctypes.c_ulonglong),
        ("ftStartTime", ctypes.c_ulonglong),
        ("ullAudioStreamPosition", ctypes.c_ulonglong),
        ("ulAudioSizeBytes", wintypes.DWORD),
        ("ulRetainedSizeBytes", wintypes.DWORD),
        ("ulAudioSizeTime", wintypes.DWORD),
        ("Rule", SPPHRASERULE),
        ("pProperties", ctypes.c_void_p),
        ("pElements", ctypes.c_void_p),
        ("cReplacements", wintypes.DWORD),
        ("pReplacements", ctypes.c_void_p),
        ("SREngineID", GUID),
        ("ulSREnginePrivateDataSize", wintypes.DWORD),
        ("pSREnginePrivateData", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct SPPHRASERULE {
    pub pszName: *mut core::ffi::c_void,
    pub ulId: u32,
    pub ulFirstElement: u32,
    pub ulCountOfElements: u32,
    pub pNextSibling: *mut core::ffi::c_void,
    pub pFirstChild: *mut core::ffi::c_void,
    pub SREngineConfidence: f32,
    pub Confidence: i8,
}

#[repr(C)]
pub struct SPPHRASE_50 {
    pub cbSize: u32,
    pub LangID: u16,
    pub wHomophoneGroupId: u16,
    pub ullGrammarID: u64,
    pub ftStartTime: u64,
    pub ullAudioStreamPosition: u64,
    pub ulAudioSizeBytes: u32,
    pub ulRetainedSizeBytes: u32,
    pub ulAudioSizeTime: u32,
    pub Rule: SPPHRASERULE,
    pub pProperties: *mut core::ffi::c_void,
    pub pElements: *mut core::ffi::c_void,
    pub cReplacements: u32,
    pub pReplacements: *mut core::ffi::c_void,
    pub SREngineID: GUID,
    pub ulSREnginePrivateDataSize: u32,
    pub pSREnginePrivateData: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type SPPHRASERULE struct {
	pszName uintptr
	ulId uint32
	ulFirstElement uint32
	ulCountOfElements uint32
	pNextSibling uintptr
	pFirstChild uintptr
	SREngineConfidence float32
	Confidence int8
}

type SPPHRASE_50 struct {
	cbSize uint32
	LangID uint16
	wHomophoneGroupId uint16
	ullGrammarID uint64
	ftStartTime uint64
	ullAudioStreamPosition uint64
	ulAudioSizeBytes uint32
	ulRetainedSizeBytes uint32
	ulAudioSizeTime uint32
	Rule SPPHRASERULE
	pProperties uintptr
	pElements uintptr
	cReplacements uint32
	pReplacements uintptr
	SREngineID windows.GUID
	ulSREnginePrivateDataSize uint32
	pSREnginePrivateData uintptr
}
type
  SPPHRASERULE = record
    pszName: Pointer;
    ulId: DWORD;
    ulFirstElement: DWORD;
    ulCountOfElements: DWORD;
    pNextSibling: Pointer;
    pFirstChild: Pointer;
    SREngineConfidence: Single;
    Confidence: Shortint;
  end;

  SPPHRASE_50 = record
    cbSize: DWORD;
    LangID: Word;
    wHomophoneGroupId: Word;
    ullGrammarID: UInt64;
    ftStartTime: UInt64;
    ullAudioStreamPosition: UInt64;
    ulAudioSizeBytes: DWORD;
    ulRetainedSizeBytes: DWORD;
    ulAudioSizeTime: DWORD;
    Rule: SPPHRASERULE;
    pProperties: Pointer;
    pElements: Pointer;
    cReplacements: DWORD;
    pReplacements: Pointer;
    SREngineID: TGUID;
    ulSREnginePrivateDataSize: DWORD;
    pSREnginePrivateData: Pointer;
  end;
const SPPHRASERULE = extern struct {
    pszName: ?*anyopaque,
    ulId: u32,
    ulFirstElement: u32,
    ulCountOfElements: u32,
    pNextSibling: ?*anyopaque,
    pFirstChild: ?*anyopaque,
    SREngineConfidence: f32,
    Confidence: i8,
};

const SPPHRASE_50 = extern struct {
    cbSize: u32,
    LangID: u16,
    wHomophoneGroupId: u16,
    ullGrammarID: u64,
    ftStartTime: u64,
    ullAudioStreamPosition: u64,
    ulAudioSizeBytes: u32,
    ulRetainedSizeBytes: u32,
    ulAudioSizeTime: u32,
    Rule: SPPHRASERULE,
    pProperties: ?*anyopaque,
    pElements: ?*anyopaque,
    cReplacements: u32,
    pReplacements: ?*anyopaque,
    SREngineID: GUID,
    ulSREnginePrivateDataSize: u32,
    pSREnginePrivateData: ?*anyopaque,
};
type
  SPPHRASERULE {.bycopy.} = object
    pszName: pointer
    ulId: uint32
    ulFirstElement: uint32
    ulCountOfElements: uint32
    pNextSibling: pointer
    pFirstChild: pointer
    SREngineConfidence: float32
    Confidence: int8

  SPPHRASE_50 {.bycopy.} = object
    cbSize: uint32
    LangID: uint16
    wHomophoneGroupId: uint16
    ullGrammarID: uint64
    ftStartTime: uint64
    ullAudioStreamPosition: uint64
    ulAudioSizeBytes: uint32
    ulRetainedSizeBytes: uint32
    ulAudioSizeTime: uint32
    Rule: SPPHRASERULE
    pProperties: pointer
    pElements: pointer
    cReplacements: uint32
    pReplacements: pointer
    SREngineID: GUID
    ulSREnginePrivateDataSize: uint32
    pSREnginePrivateData: pointer
struct SPPHRASERULE
{
    void* pszName;
    uint ulId;
    uint ulFirstElement;
    uint ulCountOfElements;
    void* pNextSibling;
    void* pFirstChild;
    float SREngineConfidence;
    byte Confidence;
}

struct SPPHRASE_50
{
    uint cbSize;
    ushort LangID;
    ushort wHomophoneGroupId;
    ulong ullGrammarID;
    ulong ftStartTime;
    ulong ullAudioStreamPosition;
    uint ulAudioSizeBytes;
    uint ulRetainedSizeBytes;
    uint ulAudioSizeTime;
    SPPHRASERULE Rule;
    void* pProperties;
    void* pElements;
    uint cReplacements;
    void* pReplacements;
    GUID SREngineID;
    uint ulSREnginePrivateDataSize;
    void* pSREnginePrivateData;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SPPHRASE_50 サイズ: 120 バイト(x86)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; LangID : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wHomophoneGroupId : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; ullGrammarID : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ftStartTime : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ullAudioStreamPosition : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ulAudioSizeBytes : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ulRetainedSizeBytes : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ulAudioSizeTime : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; Rule : SPPHRASERULE (+44, 32byte)  varptr(st)+44 を基点に操作(32byte:入れ子/配列)
; pProperties : SPPHRASEPROPERTY* (+76, 4byte)  varptr(st)+76 を基点に操作(4byte:入れ子/配列)
; pElements : SPPHRASEELEMENT* (+80, 4byte)  varptr(st)+80 を基点に操作(4byte:入れ子/配列)
; cReplacements : DWORD (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; pReplacements : SPPHRASEREPLACEMENT* (+88, 4byte)  varptr(st)+88 を基点に操作(4byte:入れ子/配列)
; SREngineID : GUID (+92, 16byte)  varptr(st)+92 を基点に操作(16byte:入れ子/配列)
; ulSREnginePrivateDataSize : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; pSREnginePrivateData : BYTE* (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SPPHRASE_50 サイズ: 160 バイト(x64)
dim st, 40    ; 4byte整数×40(構造体サイズ 160 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; LangID : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; wHomophoneGroupId : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; ullGrammarID : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; ftStartTime : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ullAudioStreamPosition : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; ulAudioSizeBytes : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ulRetainedSizeBytes : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; ulAudioSizeTime : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; Rule : SPPHRASERULE (+48, 48byte)  varptr(st)+48 を基点に操作(48byte:入れ子/配列)
; pProperties : SPPHRASEPROPERTY* (+96, 8byte)  varptr(st)+96 を基点に操作(8byte:入れ子/配列)
; pElements : SPPHRASEELEMENT* (+104, 8byte)  varptr(st)+104 を基点に操作(8byte:入れ子/配列)
; cReplacements : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; pReplacements : SPPHRASEREPLACEMENT* (+120, 8byte)  varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; SREngineID : GUID (+128, 16byte)  varptr(st)+128 を基点に操作(16byte:入れ子/配列)
; ulSREnginePrivateDataSize : DWORD (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; pSREnginePrivateData : BYTE* (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global SPPHRASERULE
    #field intptr pszName
    #field int ulId
    #field int ulFirstElement
    #field int ulCountOfElements
    #field intptr pNextSibling
    #field intptr pFirstChild
    #field float SREngineConfidence
    #field byte Confidence
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global SPPHRASE_50
    #field int cbSize
    #field short LangID
    #field short wHomophoneGroupId
    #field int64 ullGrammarID
    #field int64 ftStartTime
    #field int64 ullAudioStreamPosition
    #field int ulAudioSizeBytes
    #field int ulRetainedSizeBytes
    #field int ulAudioSizeTime
    #field SPPHRASERULE Rule
    #field intptr pProperties
    #field intptr pElements
    #field int cReplacements
    #field intptr pReplacements
    #field GUID SREngineID
    #field int ulSREnginePrivateDataSize
    #field intptr pSREnginePrivateData
#endstruct

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