MIXERLINEW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbStruct | DWORD | 4 | +0 | +0 | MIXERLINE 構造体のサイズ (バイト単位)。このメンバーは、mixerGetLineInfo 関数を呼び出す前に初期化しておく必要があります。このメンバーに指定するサイズは、MIXERLINE 構造体を格納できる十分な大きさでなければなりません。mixerGetLineInfo が返るとき、このメンバーには返された情報の実際のサイズが格納されます。返される情報が要求したサイズを超えることはありません。 | ||||||||||||||||||||||||||||||||||||||||||
| dwDestination | DWORD | 4 | +4 | +4 | デスティネーションラインのインデックスです。このメンバーは、0 から、mixerGetDevCaps 関数で取得した MIXERCAPS 構造体の cDestinations メンバーに指定された値より 1 小さい値までの範囲を取ります。mixerGetLineInfo 関数を MIXER_GETLINEINFOF_DESTINATION フラグ付きで呼び出すと、デスティネーションラインのプロパティが返されます (この場合、dwSource メンバーは 0 に設定しなければなりません)。MIXER_GETLINEINFOF_SOURCE フラグ付きで呼び出すと、dwDestination メンバーに関連付けられた dwSource メンバーで指定されたソースのプロパティが返されます。 | ||||||||||||||||||||||||||||||||||||||||||
| dwSource | DWORD | 4 | +8 | +8 | dwDestination メンバーに関連付けられたオーディオソースラインのインデックスです。つまり、このメンバーは、指定されたオーディオデスティネーションラインに関連付けられた n 番目のオーディオソースラインを指定します。このメンバーはデスティネーションラインでは使用されず、mixerGetLineInfo 関数で MIXER_GETLINEINFOF_DESTINATION を指定する場合は 0 に設定しなければなりません。MIXER_GETLINEINFOF_SOURCE フラグを指定した場合、このメンバーは 0 から、dwDestination メンバーで指定したオーディオデスティネーションラインの cConnections メンバーの値より 1 小さい値までの範囲を取ります。 | ||||||||||||||||||||||||||||||||||||||||||
| dwLineID | DWORD | 4 | +12 | +12 | MIXERLINE 構造体が記述するオーディオラインを一意に参照する、ミキサーデバイスが定義した識別子です。この識別子はミキサーデバイスごとに一意であり、任意の形式を取り得ます。アプリケーションは、この識別子を抽象的なハンドルとしてのみ使用してください。 | ||||||||||||||||||||||||||||||||||||||||||
| fdwLine | DWORD | 4 | +16 | +16 | オーディオラインの状態およびサポートを示すフラグです。このメンバーは常にアプリケーションに返されるため、初期化は不要です。 アプリケーションが波形オーディオ出力デバイスを使用していない場合、そのデバイスに関連付けられたオーディオラインはアクティブになりません (つまり、MIXERLINE_LINEF_ACTIVE フラグは設定されません)。 波形オーディオ出力デバイスが開かれている場合、そのオーディオラインはアクティブとみなされ、MIXERLINE_LINEF_ACTIVE フラグが設定されます。 一時停止中またはデータ供給が途切れた波形オーディオ出力デバイスも、引き続きアクティブとみなされます。つまり、データが再生されているかどうかにかかわらず、アプリケーションが波形オーディオ出力デバイスを開いていれば、関連付けられたオーディオラインはアクティブとみなされます。 ラインがアクティブであると厳密に定義できない場合、ミキサーデバイスは常に MIXERLINE_LINEF_ACTIVE フラグを設定します。 | ||||||||||||||||||||||||||||||||||||||||||
| dwUser | UINT_PTR | 8/4 | +20 | +20 | ラインに対してオーディオデバイスが定義したインスタンスデータです。このメンバーは、この情報を返すミキサーデバイス専用に設計されたカスタムミキサーアプリケーションを対象としています。それ以外のアプリケーションは、このデータを無視してください。 | ||||||||||||||||||||||||||||||||||||||||||
| dwComponentType | MIXERLINE_COMPONENTTYPE | 4 | +28 | +24 | このオーディオラインのコンポーネントタイプです。アプリケーションは、この情報を使用して用途に応じたグラフィックスを表示したり、特定のコンポーネントを検索したりできます。アプリケーションがコンポーネントタイプを使用しない場合、このメンバーは無視してください。このメンバーには次のいずれかの値を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||
| cChannels | DWORD | 4 | +32 | +28 | オーディオラインで独立して操作できる個別チャネルの最大数です。ラインには少なくとも 1 つのチャネルが必要なため、このフィールドの最小値は 1 です。 最近のパーソナルコンピューター用オーディオカードのほとんどはステレオデバイスであり、その場合このメンバーの値は 2 になります。 チャネル 1 は左チャネル、チャネル 2 は右チャネルとみなされます。 マルチチャネルのラインには、1 つ以上の統一コントロール (ラインのすべてのチャネルに一様に作用するコントロール) が関連付けられていることがあります。 | ||||||||||||||||||||||||||||||||||||||||||
| cConnections | DWORD | 4 | +36 | +32 | オーディオラインに関連付けられた接続の数です。このメンバーはオーディオデスティネーションラインでのみ使用され、そのラインに関連付けられたオーディオソースラインの数を示します。ソースラインの場合、およびオーディオソースラインが 1 つも関連付けられていないデスティネーションラインの場合、このメンバーは常に 0 です。 | ||||||||||||||||||||||||||||||||||||||||||
| cControls | DWORD | 4 | +40 | +36 | オーディオラインに関連付けられたコントロールの数です。この値は 0 になることもあります。ラインにコントロールが関連付けられていない場合、そのラインはおそらく MIXERCONTROL_CONTROLTYPE_MUX または MIXERCONTROL_CONTROLTYPE_MIXER で選択できるものの、信号の操作は行えないソースです。 | ||||||||||||||||||||||||||||||||||||||||||
| szShortName | WCHAR | 32 | +44 | +40 | dwLineID メンバーで指定されたオーディオミキサーラインを説明する短い文字列です。この説明は、ラインの簡潔なラベルとして適切なものである必要があります。 | ||||||||||||||||||||||||||||||||||||||||||
| szName | WCHAR | 128 | +76 | +72 | dwLineID メンバーで指定されたオーディオミキサーラインを説明する文字列です。この説明は、ラインの完全な説明として適切なものである必要があります。 | ||||||||||||||||||||||||||||||||||||||||||
| Target | _Target_e__Struct | 80 | +204 | +200 | ターゲットメディアの情報です。 |
構造体: _Target_e__Struct x64 80B / x86 80B
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dwType | DWORD | 4 | +0 | +0 | MIXERLINE 構造体が記述するオーディオラインに関連付けられた、ターゲットメディアデバイスの種類です。アプリケーションは、自身が使用しないメディアデバイスの種類に関するターゲット情報を無視しなければなりません。次の値が定義されています。
| ||||||||||||||
| dwDeviceID | DWORD | 4 | +4 | +4 | dwType メンバーが MIXERLINE_TARGETTYPE_UNDEFINED 以外のターゲットタイプである場合の、ターゲットメディアデバイスの現在のデバイス識別子です。この識別子は、関連付けられたメディアデバイスの現在のメディアデバイスインデックスと同一です。mixerGetLineInfo 関数を MIXER_GETLINEINFOF_TARGETTYPE フラグ付きで呼び出す場合、このメンバーは入力時には無視され、オーディオミキサーマネージャーによって呼び出し元に返されます。 | ||||||||||||||
| wMid | WORD | 2 | +8 | +8 | dwType メンバーが MIXERLINE_TARGETTYPE_UNDEFINED 以外のターゲットタイプである場合の、ターゲットメディアデバイスの製造元識別子です。この識別子は、関連付けられたメディアのデバイス機能構造体の wMid メンバーと同一です。製造元識別子は Manufacturer and Product Identifiers で定義されています。 | ||||||||||||||
| wPid | WORD | 2 | +10 | +10 | dwType メンバーが MIXERLINE_TARGETTYPE_UNDEFINED 以外のターゲットタイプである場合の、ターゲットメディアデバイスの製品識別子です。この識別子は、関連付けられたメディアのデバイス機能構造体の wPid メンバーと同一です。製品識別子は Manufacturer and Product Identifiers で定義されています。 | ||||||||||||||
| vDriverVersion | DWORD | 4 | +12 | +12 | dwType メンバーが MIXERLINE_TARGETTYPE_UNDEFINED 以外のターゲットタイプである場合の、ターゲットメディアデバイスのドライバーバージョンです。このバージョンは、関連付けられたメディアのデバイス機能構造体の vDriverVersion メンバーと同一です。 | ||||||||||||||
| szPname | WCHAR | 64 | +16 | +16 | dwType メンバーが MIXERLINE_TARGETTYPE_UNDEFINED 以外のターゲットタイプである場合の、ターゲットメディアデバイスの製品名です。この名前は、関連付けられたメディアのデバイス機能構造体の szPname メンバーと同一です。 |
公式ドキュメント
MIXERLINE 構造体は、オーディオラインの状態とメトリックを記述します。
解説(Remarks)
mmeapi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に応じて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして MIXERLINE を定義しています。エンコーディング中立のエイリアスと、エンコーディング中立ではないコードを混在させると不一致が生じ、コンパイルエラーや実行時エラーの原因となることがあります。詳細については、Conventions for Function Prototypes を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// MIXERLINEW (x64 284 / x86 280 バイト)
#pragma pack(push, 1)
typedef struct MIXERLINEW {
DWORD cbStruct;
DWORD dwDestination;
DWORD dwSource;
DWORD dwLineID;
DWORD fdwLine;
UINT_PTR dwUser;
MIXERLINE_COMPONENTTYPE dwComponentType;
DWORD cChannels;
DWORD cConnections;
DWORD cControls;
WCHAR szShortName[16];
WCHAR szName[64];
_Target_e__Struct Target;
} MIXERLINEW;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct MIXERLINEW
{
public uint cbStruct;
public uint dwDestination;
public uint dwSource;
public uint dwLineID;
public uint fdwLine;
public UIntPtr dwUser;
public uint dwComponentType;
public uint cChannels;
public uint cConnections;
public uint cControls;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string szShortName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] public string szName;
public _Target_e__Struct Target;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure MIXERLINEW
Public cbStruct As UInteger
Public dwDestination As UInteger
Public dwSource As UInteger
Public dwLineID As UInteger
Public fdwLine As UInteger
Public dwUser As UIntPtr
Public dwComponentType As UInteger
Public cChannels As UInteger
Public cConnections As UInteger
Public cControls As UInteger
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public szShortName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=64)> Public szName As String
Public Target As _Target_e__Struct
End Structureimport ctypes
from ctypes import wintypes
class MIXERLINEW(ctypes.Structure):
_pack_ = 1
_fields_ = [
("cbStruct", wintypes.DWORD),
("dwDestination", wintypes.DWORD),
("dwSource", wintypes.DWORD),
("dwLineID", wintypes.DWORD),
("fdwLine", wintypes.DWORD),
("dwUser", ctypes.c_size_t),
("dwComponentType", wintypes.DWORD),
("cChannels", wintypes.DWORD),
("cConnections", wintypes.DWORD),
("cControls", wintypes.DWORD),
("szShortName", ctypes.c_wchar * 16),
("szName", ctypes.c_wchar * 64),
("Target", _Target_e__Struct),
]#[repr(C, packed(1))]
pub struct MIXERLINEW {
pub cbStruct: u32,
pub dwDestination: u32,
pub dwSource: u32,
pub dwLineID: u32,
pub fdwLine: u32,
pub dwUser: usize,
pub dwComponentType: u32,
pub cChannels: u32,
pub cConnections: u32,
pub cControls: u32,
pub szShortName: [u16; 16],
pub szName: [u16; 64],
pub Target: _Target_e__Struct,
}import "golang.org/x/sys/windows"
type MIXERLINEW struct {
cbStruct uint32
dwDestination uint32
dwSource uint32
dwLineID uint32
fdwLine uint32
dwUser uintptr
dwComponentType uint32
cChannels uint32
cConnections uint32
cControls uint32
szShortName [16]uint16
szName [64]uint16
Target _Target_e__Struct
}type
MIXERLINEW = packed record
cbStruct: DWORD;
dwDestination: DWORD;
dwSource: DWORD;
dwLineID: DWORD;
fdwLine: DWORD;
dwUser: NativeUInt;
dwComponentType: DWORD;
cChannels: DWORD;
cConnections: DWORD;
cControls: DWORD;
szShortName: array[0..15] of WideChar;
szName: array[0..63] of WideChar;
Target: _Target_e__Struct;
end;const MIXERLINEW = extern struct {
cbStruct: u32,
dwDestination: u32,
dwSource: u32,
dwLineID: u32,
fdwLine: u32,
dwUser: usize,
dwComponentType: u32,
cChannels: u32,
cConnections: u32,
cControls: u32,
szShortName: [16]u16,
szName: [64]u16,
Target: _Target_e__Struct,
};type
MIXERLINEW {.packed.} = object
cbStruct: uint32
dwDestination: uint32
dwSource: uint32
dwLineID: uint32
fdwLine: uint32
dwUser: uint
dwComponentType: uint32
cChannels: uint32
cConnections: uint32
cControls: uint32
szShortName: array[16, uint16]
szName: array[64, uint16]
Target: _Target_e__Structalign(1)
struct MIXERLINEW
{
uint cbStruct;
uint dwDestination;
uint dwSource;
uint dwLineID;
uint fdwLine;
size_t dwUser;
uint dwComponentType;
uint cChannels;
uint cConnections;
uint cControls;
wchar[16] szShortName;
wchar[64] szName;
_Target_e__Struct Target;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MIXERLINEW サイズ: 280 バイト(x86)
dim st, 70 ; 4byte整数×70(構造体サイズ 280 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwDestination : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwSource : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwLineID : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; fdwLine : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwUser : UINT_PTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwComponentType : MIXERLINE_COMPONENTTYPE (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; cChannels : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; cConnections : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; cControls : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; szShortName : WCHAR (+40, 32byte) varptr(st)+40 を基点に操作(32byte:入れ子/配列)
; szName : WCHAR (+72, 128byte) varptr(st)+72 を基点に操作(128byte:入れ子/配列)
; Target : _Target_e__Struct (+200, 80byte) varptr(st)+200 を基点に操作(80byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MIXERLINEW サイズ: 284 バイト(x64)
dim st, 71 ; 4byte整数×71(構造体サイズ 284 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwDestination : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwSource : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwLineID : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; fdwLine : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwUser : UINT_PTR (+20, 8byte) qpoke st,20,値 / qpeek(st,20) ※IronHSPのみ。3.7/3.8は lpoke st,20,下位 : lpoke st,24,上位
; dwComponentType : MIXERLINE_COMPONENTTYPE (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; cChannels : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; cConnections : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; cControls : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; szShortName : WCHAR (+44, 32byte) varptr(st)+44 を基点に操作(32byte:入れ子/配列)
; szName : WCHAR (+76, 128byte) varptr(st)+76 を基点に操作(128byte:入れ子/配列)
; Target : _Target_e__Struct (+204, 80byte) varptr(st)+204 を基点に操作(80byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MIXERLINEW, pack=1
#field int cbStruct
#field int dwDestination
#field int dwSource
#field int dwLineID
#field int fdwLine
#field intptr dwUser
#field int dwComponentType
#field int cChannels
#field int cConnections
#field int cControls
#field wchar szShortName 16
#field wchar szName 64
#field _Target_e__Struct Target
#endstruct
stdim st, MIXERLINEW ; NSTRUCT 変数を確保
st->cbStruct = 100
mes "cbStruct=" + st->cbStruct