📄 dmusici.h
字号:
/************************************************************************
* *
* dmusici.h -- This module contains the API for the *
* DirectMusic performance layer *
* *
* Copyright (c) 1998-1999 Microsoft Corporation
* *
************************************************************************/
#ifndef _DMUSICI_
#define _DMUSICI_
#include <windows.h>
#define COM_NO_WINDOWS_H
#include <objbase.h>
#include <mmsystem.h>
#include <dmusicc.h>
/* plugin (track and tool) interfaces. This #include will eventually go away. */
#include <dmplugin.h>
#include <pshpack8.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef WORD TRANSITION_TYPE;
typedef __int64 REFERENCE_TIME;
typedef long MUSIC_TIME;
#define MT_MIN 0x80000000 /* Minimum music time value. */
#define MT_MAX 0x7FFFFFFF /* Maximum music time value. */
#define DMUS_PPQ 768 /* parts per quarter note */
interface IDirectMusicTrack;
interface IDirectMusicPerformance;
interface IDirectMusicPerformance8;
interface IDirectMusicTool;
interface IDirectMusicSegment;
interface IDirectMusicSegment8;
interface IDirectMusicSegmentState;
interface IDirectMusicSegmentState8;
interface IDirectMusicGraph;
interface IDirectMusicBuffer;
interface IDirectMusicInstrument;
interface IDirectMusicDownloadedInstrument;
interface IDirectMusicBand;
interface IDirectMusicChordMap;
interface IDirectMusicLoader;
interface IDirectMusicLoader8;
interface IDirectMusicScript;
interface IDirectMusicObject;
interface IDirectMusicStyle8;
interface IDirectMusicPatternTrack;
interface IDirectMusicContainer;
interface IDirectMusicTool8;
interface IDirectMusicTrack8;
interface IDirectMusicSong;
interface IDirectMusicAudioPath;
#ifndef __cplusplus
typedef interface IDirectMusicTrack IDirectMusicTrack;
typedef interface IDirectMusicPerformance IDirectMusicPerformance;
typedef interface IDirectMusicPerformance8 IDirectMusicPerformance8;
typedef interface IDirectMusicTool IDirectMusicTool;
typedef interface IDirectMusicSegment IDirectMusicSegment;
typedef interface IDirectMusicSegment8 IDirectMusicSegment8;
typedef interface IDirectMusicSegmentState IDirectMusicSegmentState;
typedef interface IDirectMusicSegmentState8 IDirectMusicSegmentState8;
typedef interface IDirectMusicGraph IDirectMusicGraph;
typedef interface IDirectMusicBuffer IDirectMusicBuffer;
typedef interface IDirectMusicInstrument IDirectMusicInstrument;
typedef interface IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument;
typedef interface IDirectMusicBand IDirectMusicBand;
typedef interface IDirectMusicChordMap IDirectMusicChordMap;
typedef interface IDirectMusicObject IDirectMusicObject;
typedef interface IDirectMusicLoader IDirectMusicLoader;
typedef interface IDirectMusicLoader8 IDirectMusicLoader8;
typedef interface IDirectMusicScript IDirectMusicScript;
typedef interface IDirectMusicStyle8 IDirectMusicStyle8;
typedef interface IDirectMusicPatternTrack IDirectMusicPatternTrack;
typedef interface IDirectMusicContainer IDirectMusicContainer;
typedef interface IDirectMusicTool8 IDirectMusicTool8;
typedef interface IDirectMusicTrack8 IDirectMusicTrack8;
typedef interface IDirectMusicSong IDirectMusicSong;
typedef interface IDirectMusicAudioPath IDirectMusicAudioPath;
#endif
typedef enum enumDMUS_STYLET_TYPES
{
DMUS_STYLET_PATTERN = 0,
DMUS_STYLET_MOTIF = 1,
DMUS_STYLET_FRAGMENT = 2,
} DMUS_STYLET_TYPES;
typedef enum enumDMUS_COMMANDT_TYPES
{
DMUS_COMMANDT_GROOVE = 0,
DMUS_COMMANDT_FILL = 1,
DMUS_COMMANDT_INTRO = 2,
DMUS_COMMANDT_BREAK = 3,
DMUS_COMMANDT_END = 4,
DMUS_COMMANDT_ENDANDINTRO = 5
} DMUS_COMMANDT_TYPES;
typedef enum enumDMUS_SHAPET_TYPES
{
DMUS_SHAPET_FALLING = 0,
DMUS_SHAPET_LEVEL = 1,
DMUS_SHAPET_LOOPABLE = 2,
DMUS_SHAPET_LOUD = 3,
DMUS_SHAPET_QUIET = 4,
DMUS_SHAPET_PEAKING = 5,
DMUS_SHAPET_RANDOM = 6,
DMUS_SHAPET_RISING = 7,
DMUS_SHAPET_SONG = 8
} DMUS_SHAPET_TYPES;
typedef enum enumDMUS_COMPOSEF_FLAGS
{
DMUS_COMPOSEF_NONE = 0,
DMUS_COMPOSEF_ALIGN = 0x1,
DMUS_COMPOSEF_OVERLAP = 0x2,
DMUS_COMPOSEF_IMMEDIATE = 0x4,
DMUS_COMPOSEF_GRID = 0x8,
DMUS_COMPOSEF_BEAT = 0x10,
DMUS_COMPOSEF_MEASURE = 0x20,
DMUS_COMPOSEF_AFTERPREPARETIME = 0x40,
DMUS_COMPOSEF_VALID_START_BEAT = 0x80, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any beat. */
DMUS_COMPOSEF_VALID_START_GRID = 0x100, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any grid. */
DMUS_COMPOSEF_VALID_START_TICK = 0x200, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur any time. */
DMUS_COMPOSEF_SEGMENTEND = 0x400, /* Play the transition at the end of the current segment. */
DMUS_COMPOSEF_MARKER = 0x800, /* Play the transition at the next marker in the current segment. */
DMUS_COMPOSEF_MODULATE = 0x1000,
DMUS_COMPOSEF_LONG = 0x2000,
DMUS_COMPOSEF_ENTIRE_TRANSITION = 0x4000, /* play the entire transition pattern */
DMUS_COMPOSEF_1BAR_TRANSITION = 0x8000, /* play one bar of the transition pattern */
DMUS_COMPOSEF_ENTIRE_ADDITION = 0x10000, /* play the additional pattern in its entirety */
DMUS_COMPOSEF_1BAR_ADDITION = 0x20000, /* play one bar of the additional pattern */
DMUS_COMPOSEF_VALID_START_MEASURE = 0x40000, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any bar. */
DMUS_COMPOSEF_DEFAULT = 0x80000, /* Use segment's default boundary */
DMUS_COMPOSEF_NOINVALIDATE = 0x100000, /* Play without invalidating the currently playing segment(s) */
DMUS_COMPOSEF_USE_AUDIOPATH = 0x200000, /* Uses the audio paths that are embedded in the segments */
DMUS_COMPOSEF_INVALIDATE_PRI = 0x400000 /* Invalidate only the current primary seg state */
} DMUS_COMPOSEF_FLAGS;
#define DMUS_PMSG_PART \
DWORD dwSize; \
REFERENCE_TIME rtTime; /* real time (in 100 nanosecond increments) */ \
MUSIC_TIME mtTime; /* music time */ \
DWORD dwFlags; /* various bits (see DMUS_PMSGF_FLAGS enumeration) */ \
DWORD dwPChannel; /* Performance Channel. The Performance can */ \
/* use this to determine the port/channel. */ \
DWORD dwVirtualTrackID; /* virtual track ID */ \
IDirectMusicTool* pTool; /* tool interface pointer */ \
IDirectMusicGraph* pGraph; /* tool graph interface pointer */ \
DWORD dwType; /* PMSG type (see DMUS_PMSGT_TYPES defines) */ \
DWORD dwVoiceID; /* unique voice id which allows synthesizers to */ \
/* identify a specific event. For DirectX 6.0, */ \
/* this field should always be 0. */ \
DWORD dwGroupID; /* Track group id */ \
IUnknown* punkUser; /* user com pointer, auto released upon PMSG free */
/* every DMUS_PMSG is based off of this structure. The Performance needs
to access these members consistently in every PMSG that goes through it. */
typedef struct _DMUS_PMSG
{
/* begin DMUS_PMSG_PART */
DMUS_PMSG_PART
/* end DMUS_PMSG_PART */
} DMUS_PMSG;
#define DMUS_PCHANNEL_BROADCAST_PERFORMANCE 0xFFFFFFFF /* PMsg is sent on all PChannels of the performance. */
#define DMUS_PCHANNEL_BROADCAST_AUDIOPATH 0xFFFFFFFE /* PMsg is sent on all PChannels of the audio path. */
#define DMUS_PCHANNEL_BROADCAST_SEGMENT 0xFFFFFFFD /* PMsg is sent on all PChannels of the segment. */
#define DMUS_PCHANNEL_BROADCAST_GROUPS 0xFFFFFFFC /* A duplicate PMsg is for each Channels Groups in the performance. */
/* The DMUS_PATH constants are used in conjunction with GetObjectInPath to find a requested
interface at a particular stage in the audio path.
*/
#define DMUS_PATH_SEGMENT 0x1000 /* Get the segment itself (from a segment state.) */
#define DMUS_PATH_SEGMENT_TRACK 0x1100 /* Look in Track List of Segment. */
#define DMUS_PATH_SEGMENT_GRAPH 0x1200 /* Get the segment's tool graph. */
#define DMUS_PATH_SEGMENT_TOOL 0x1300 /* Look in Tool Graph of Segment. */
#define DMUS_PATH_AUDIOPATH 0x2000 /* Get the audiopath itself (from a segment state.) */
#define DMUS_PATH_AUDIOPATH_GRAPH 0x2200 /* Get the audiopath's tool graph. */
#define DMUS_PATH_AUDIOPATH_TOOL 0x2300 /* Look in Tool Graph of Audio Path. */
#define DMUS_PATH_PERFORMANCE 0x3000 /* Access the performance. */
#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200 /* Get the performance's tool graph. */
#define DMUS_PATH_PERFORMANCE_TOOL 0x3300 /* Look in Tool Graph of Performance. */
#define DMUS_PATH_PORT 0x4000 /* Access the synth. */
#define DMUS_PATH_BUFFER 0x6000 /* Look in DirectSoundBuffer. */
#define DMUS_PATH_BUFFER_DMO 0x6100 /* Access a DMO in the buffer. */
#define DMUS_PATH_MIXIN_BUFFER 0x7000 /* Look in a global mixin buffer. */
#define DMUS_PATH_MIXIN_BUFFER_DMO 0x7100 /* Access a DMO in a global mixin buffer. */
#define DMUS_PATH_PRIMARY_BUFFER 0x8000 /* Access the primary buffer. */
/* To ignore PChannels when calling GetObjectInPath(), use the DMUS_PCHANNEL_ALL constant. */
#define DMUS_PCHANNEL_ALL 0xFFFFFFFB
/* The DMUS_APATH types are used in conjunction with CreateStandardAudioPath to
build default path types. _SHARED_ means the same buffer is shared across multiple
instantiations of the audiopath type. _DYNAMIC_ means a unique buffer is created
every time.
*/
#define DMUS_APATH_SHARED_STEREOPLUSREVERB 1 /* A standard music set up with stereo outs and reverb. */
#define DMUS_APATH_DYNAMIC_3D 6 /* An audio path with one dynamic bus from the synth feeding to a dynamic 3d buffer. Does not send to env reverb. */
#define DMUS_APATH_DYNAMIC_MONO 7 /* An audio path with one dynamic bus from the synth feeding to a dynamic mono buffer. */
#define DMUS_APATH_DYNAMIC_STEREO 8 /* An audio path with two dynamic buses from the synth feeding to a dynamic stereo buffer. */
typedef struct _DMUS_AUDIOPARAMS
{
DWORD dwSize; /* Size of this structure. */
BOOL fInitNow; /* If true, the sink and synth are created immediately and results returned in this structure. */
DWORD dwValidData; /* Flags indicating which fields below are valid. */
DWORD dwFeatures; /* Required DMUS_AUDIOF features. */
DWORD dwVoices; /* Required number of voices. */
DWORD dwSampleRate; /* Sample rate of synths and sink. */
CLSID clsidDefaultSynth; /* Class ID of default synthesizer. */
} DMUS_AUDIOPARAMS;
/* dwFeatures flags. These indicate which features are required for the audio environment. */
#define DMUS_AUDIOF_3D 0x1 /* Require 3D buffers. */
#define DMUS_AUDIOF_ENVIRON 0x2 /* Require environmental modeling. */
#define DMUS_AUDIOF_EAX 0x4 /* Require use of EAX effects. */
#define DMUS_AUDIOF_DMOS 0x8 /* Require use of additional DMOs. */
#define DMUS_AUDIOF_STREAMING 0x10 /* Require support for streaming waves. */
#define DMUS_AUDIOF_BUFFERS 0x20 /* Require support for multiple buffers (all above cases need this.) */
#define DMUS_AUDIOF_ALL 0x3F /* Requires everything. */
/* dwValidData flags. These indicate which fields in DMUS_AUDIOPARAMS have been filled in. If fInitNow is set, these also return what was allocated. */
#define DMUS_AUDIOPARAMS_FEATURES 0x00000001
#define DMUS_AUDIOPARAMS_VOICES 0x00000002
#define DMUS_AUDIOPARAMS_SAMPLERATE 0x00000004
#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x00000008
/* DMUS_PMSGF_FLAGS fill the DMUS_PMSG's dwFlags member */
typedef enum enumDMUS_PMSGF_FLAGS
{
DMUS_PMSGF_REFTIME = 1, /* if rtTime is valid */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -