📄 audio.h
字号:
DWORD fdwStatus; // ACMSTREAMHEADER_STATUSF_*
DWORD dwUser; // user instance data for hdr
BYTE* pbSrc;
DWORD cbSrcLength;
DWORD cbSrcLengthUsed;
DWORD dwSrcUser; // user instance data for src
BYTE* pbDst;
DWORD cbDstLength;
DWORD cbDstLengthUsed;
DWORD dwDstUser; // user instance data for dst
DWORD dwReservedDriver[10]; // driver reserved work space
} ACMSTREAMHEADER;
#endif // _WIN32
typedef struct {
WAVEFORMATEX *pwfxSrc;
WAVEFORMATEX *pwfxDst;
DWORD fdwOpen;
} ACMDS_OPEN;
UINT AcmStreamOpen(HACMSTREAM *phas, NU_DRIVER *drv, WAVEFORMATEX *pwfxSrc, WAVEFORMATEX *pwfxDst, DWORD fdwOpen);
UINT AcmStreamSize(HACMSTREAM has, DWORD cbInput, DWORD *pdwOutputBytes, DWORD fdwSize);
UINT AcmStreamConvert(HACMSTREAM has, ACMSTREAMHEADER *pash, DWORD fdwConvert);
/***************************** MEDIA FILE MANAGER ***************************/
typedef DWORD FOURCC;
typedef void * HMEDIAFILE;
#if 1//ndef _WIN32
/* bit field masks */
#define MMIO_RWMODE 0x00000003 /* open file for reading/writing/both */
#define MMIO_SHAREMODE 0x00000070 /* file sharing mode number */
/* constants for dwFlags field of MMIOINFO */
#define MMIO_CREATE 0x00001000 /* create new file (or truncate file) */
#define MMIO_PARSE 0x00000100 /* parse new file returning path */
#define MMIO_DELETE 0x00000200 /* create new file (or truncate file) */
#define MMIO_EXIST 0x00004000 /* checks for existence of file */
#define MMIO_ALLOCBUF 0x00010000 /* mmioOpen() should allocate a buffer */
#define MMIO_DIRTY 0x10000000 /* I/O buffer is dirty */
/* read/write mode numbers (bit field MMIO_RWMODE) */
#define MMIO_READ 0x00000000 /* open file for reading only */
#define MMIO_WRITE 0x00000001 /* open file for writing only */
#define MMIO_READWRITE 0x00000002 /* open file for reading and writing */
/* share mode numbers (bit field MMIO_SHAREMODE) */
#define MMIO_COMPAT 0x00000000 /* compatibility mode */
#define MMIO_EXCLUSIVE 0x00000010 /* exclusive-access mode */
#define MMIO_DENYWRITE 0x00000020 /* deny writing to other processes */
#define MMIO_DENYREAD 0x00000030 /* deny reading to other processes */
#define MMIO_DENYNONE 0x00000040 /* deny nothing to other processes */
/* various MMIO flags */
#define MMIO_FHOPEN 0x0010 /* mmioClose: keep file handle open */
#define MMIO_EMPTYBUF 0x0010 /* mmioFlush: empty the I/O buffer */
#define MMIO_FINDCHUNK 0x0010 /* mmioDescend: find a chunk by ID */
#define MMIO_FINDRIFF 0x0020 /* mmioDescend: find a LIST chunk */
#define MMIO_FINDLIST 0x0040 /* mmioDescend: find a RIFF chunk */
#define MMIO_CREATERIFF 0x0020 /* mmioCreateChunk: make a LIST chunk */
#define MMIO_CREATELIST 0x0040 /* mmioCreateChunk: make a RIFF chunk */
#define MMIOERR_BASE 256
#define MMIOERR_FILENOTFOUND (MMIOERR_BASE + 1) /* file not found */
#define MMIOERR_OUTOFMEMORY (MMIOERR_BASE + 2) /* out of memory */
#define MMIOERR_CANNOTOPEN (MMIOERR_BASE + 3) /* cannot open */
#define MMIOERR_CANNOTCLOSE (MMIOERR_BASE + 4) /* cannot close */
#define MMIOERR_CANNOTREAD (MMIOERR_BASE + 5) /* cannot read */
#define MMIOERR_CANNOTWRITE (MMIOERR_BASE + 6) /* cannot write */
#define MMIOERR_CANNOTSEEK (MMIOERR_BASE + 7) /* cannot seek */
#define MMIOERR_CANNOTEXPAND (MMIOERR_BASE + 8) /* cannot expand file */
#define MMIOERR_CHUNKNOTFOUND (MMIOERR_BASE + 9) /* chunk not found */
#define MMIOERR_UNBUFFERED (MMIOERR_BASE + 10) /* */
#define MMIOERR_PATHNOTFOUND (MMIOERR_BASE + 11) /* path incorrect */
#define MMIOERR_ACCESSDENIED (MMIOERR_BASE + 12) /* file was protected */
#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE + 13) /* file in use */
#define MMIOERR_NETWORKERROR (MMIOERR_BASE + 14) /* network not responding */
#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE + 15) /* no more file handles */
#define MMIOERR_INVALIDFILE (MMIOERR_BASE + 16) /* default error file error */
#define MAKEFOURCC(ch0, ch1, ch2, ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
#define mmioFOURCC(ch0, ch1, ch2, ch3) MAKEFOURCC(ch0, ch1, ch2, ch3)
/* RIFF chunk information data structure */
typedef struct
{
FOURCC ckid; /* chunk ID */
DWORD cksize; /* chunk size */
FOURCC fccType; /* form type or list type */
DWORD dwDataOffset; /* offset of data portion of chunk */
DWORD dwFlags; /* flags used by MMIO functions */
} MMCKINFO;
/* general MMIO information data structure */
typedef struct
{
/* general fields */
DWORD dwFlags; /* general status flags */
FOURCC fccIOProc; /* pointer to I/O procedure */
void * pIOProc; /* pointer to I/O procedure */
UINT wErrorRet; /* place for error to be returned */
void * htask; /* alternate local task */
/* fields maintained by MMIO functions during buffered I/O */
DWORD cchBuffer; /* size of I/O buffer (or 0L) */
BYTE * pchBuffer; /* start of I/O buffer (or NULL) */
BYTE * pchNext; /* pointer to next byte to read/write */
BYTE * pchEndRead; /* pointer to last valid byte to read */
BYTE * pchEndWrite; /* pointer to last byte to write */
DWORD lBufOffset; /* disk offset of start of buffer */
/* fields maintained by I/O procedure */
DWORD lDiskOffset; /* disk offset of next read or write */
DWORD adwInfo[3]; /* data specific to type of MMIOPROC */
/* other fields maintained by MMIO */
DWORD dwReserved1; /* reserved for MMIO use */
DWORD dwReserved2; /* reserved for MMIO use */
HMEDIAFILE hmmio; /* handle to open file */
} MMIOINFO;
#endif // _WIN32
VOID MediaFileInit(VOID);
HMEDIAFILE MediaFileOpen(char *szFileName, MMIOINFO *lpmmioinfo, DWORD dwOpenFlags);
UINT MediaFileClose(HMEDIAFILE hmmio, UINT wFlags);
INT MediaFileRead(HMEDIAFILE hmmio, BYTE *pch, INT cch);
INT MediaFileWrite(HMEDIAFILE hmmio, BYTE *pch, INT cch);
INT MediaFileSeek(HMEDIAFILE hmmio, INT lOffset, int iOrigin);
UINT MediaFileGetInfo(HMEDIAFILE hmmio, MMIOINFO *lpmmioinfo, UINT wFlags);
UINT MediaFileSetInfo(HMEDIAFILE hmmio, MMIOINFO *lpmmioinfo, UINT wFlags);
UINT MediaFileAscend(HMEDIAFILE hmmio, MMCKINFO *lpck, UINT wFlags);
UINT MediaFileDescend(HMEDIAFILE hmmio, MMCKINFO *lpck, MMCKINFO *lpckParent, UINT wFlags);
FOURCC MediaFileStrToFourCC(char *sz, UINT wFlags);
UINT MediaFileGetMP3Format(HMEDIAFILE hmmio, MPEGLAYER3WAVEFORMAT *lpInfo);
UINT MediaFileGetFormat(HMEDIAFILE hmmio, UINT8 voiceType, WAVEFORMATEX *pFormat, UINT32 *pdwFileLength, UINT32 *pdwTimeLength);
/***************************** AUDIO MIXER ***************************/
#define MIXERFLAG_MEMORY 0
#define MIXERFLAG_FILE 1
#define MIXERFLAG_CUSTOM 2
#define MIXERFLAG_TYPEMASK 3
#define MIXERFLAG_LOOP 0x100
#define MIXERFLAG_OPENED 0x8000
#define MIXERFLAG_SET 1
#define MIXERFLAG_SETWHENSILENCE 2
#define MIXERFLAG_SETWHENDIFF 3
#define MIXERFLAG_SETMASK 7
typedef struct {
DWORD dwFlags; // 音源状态
char *buffer; // 缓冲区(仅用于内存模式)
DWORD size; // 缓冲区尺寸
DWORD pos; // 缓冲区当前指针
HMEDIAFILE *hmf; // 媒体文件句柄(仅用于文件模式)
DWORD start_pos; // 文件起始位置(仅用于文件模式)
} MIXERSOURCE;
#if 1//ndef _WIN32
typedef struct wavehdr_tag {
BYTE * lpData; /* pointer to locked data buffer */
DWORD dwBufferLength; /* length of data buffer */
DWORD dwBytesRecorded; /* used for input only */
DWORD dwUser; /* for client's use */
DWORD dwFlags; /* assorted flags (see defines) */
DWORD dwLoops; /* loop control counter */
struct wavehdr_tag *lpNext; /* reserved for driver */
DWORD reserved; /* reserved for driver */
} WAVEHDR;
/* flags for dwFlags field of WAVEHDR */
#define WHDR_DONE 0x00000001 /* done bit */
#define WHDR_PREPARED 0x00000002 /* set if this header has been prepared */
#define WHDR_BEGINLOOP 0x00000004 /* loop start block */
#define WHDR_ENDLOOP 0x00000008 /* loop end block */
#define WHDR_INQUEUE 0x00000010 /* reserved for driver */
#endif // _WIN32
#define OS_DLL
OS_DLL BOOL MixerOpenSource(char *szFileName, MIXERSOURCE *source, DWORD dwFlags);
OS_DLL BOOL MixerCloseSource(MIXERSOURCE *source);
OS_DLL BOOL MixerInitChannels(int nChannels);
OS_DLL BOOL MixerSetupChannel(int nChannel, MIXERSOURCE *source, DWORD dwFlags);
OS_DLL BOOL MixerClearChannel(int nChannel);
OS_DLL BOOL MixerOpenDriver(WAVEFORMATEX *pFormat, DWORD dwBufSize);
OS_DLL BOOL MixerCloseDriver(VOID);
OS_DLL BOOL MixerStartPlay(VOID);
OS_DLL BOOL MixerStopPlay(VOID);
OS_DLL void MixerDoAudioBuffer16(WAVEHDR *hdr);
OS_DLL void MixerDoAudioBuffer8(WAVEHDR *hdr);
#endif // __AUDIO_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -