⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audio.h

📁 好记星的控件,包括button,list,对文件操作
💻 H
📖 第 1 页 / 共 2 页
字号:
    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 + -