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

📄 output.h

📁 MIDI解码程序(用VC编写)
💻 H
字号:
/*    TiMidity++ -- MIDI to WAVE converter and player    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    output.h*/#ifndef ___OUTPUT_H_#define ___OUTPUT_H_#include "output.h"/* Data format encoding bits *//* {PE_16BIT,PE_ULAW,PE_ALAW} is alternative flag *//* {PE_SIGNED,PE_ULAW,PE_ALAW} is alternative flag *//* {PE_BYTESWAP,PE_ULAW,PE_ALAW} is alternative flag *//* {PE_16BIT,PE_24BIT} is alternative flag */#define PE_MONO 	(1u<<0)  /* versus stereo */#define PE_SIGNED	(1u<<1)  /* versus unsigned */#define PE_16BIT 	(1u<<2)  /* versus 8-bit */#define PE_ULAW 	(1u<<3)  /* versus linear */#define PE_ALAW 	(1u<<4)  /* versus linear */#define PE_BYTESWAP	(1u<<5)  /* versus the other way */#define PE_24BIT	(1u<<6)  /* versus 8-bit, 16-bit *//* for play_mode->acntl() */enum {    PM_REQ_MIDI,	/* ARG: MidiEvent			 * Send MIDI event.			 * If PF_MIDI_EVENT is setted, acntl() is called			 * with this request.			 */    PM_REQ_INST_NAME,	/* ARG: char**			 * Get Instrument name of channel.			 */    PM_REQ_DISCARD,	/* ARG: not-used			 * Discard the audio device buffer and returns			 * immediatly.			 */    PM_REQ_FLUSH,	/* ARG: not-used			 * Wait until all audio data is out.			 */    PM_REQ_GETQSIZ,	/* ARG: int			 * Get maxmum device queue size in bytes.			 * If acntl() returns -1,			 * timidity automatically estimate the size			 * using adhoc implementation.			 * This request is used for trace mode.			 */    PM_REQ_SETQSIZ,	/* ARG: int (in-out)			 * Set maxmum device queue size in bytes.			 * The specified ARG is updated new queue size.			 */    PM_REQ_GETFRAGSIZ,	/* ARG: int			 * Get device fragment size in bytes.			 */    PM_REQ_RATE,	/* ARG: int			 * Change the sample rate.			 */    PM_REQ_GETSAMPLES,	/* ARG: int			 * Get the current play samples.			 * Play samples must be initialized to zero if			 * PM_REQ_DISCARD/PM_REQ_FLUSH/PM_REQ_PLAY_START			 * request is receved.			 */    PM_REQ_PLAY_START,	/* ARG: not-used			 * PM_REQ_PLAY_START is called just before playing.			 */    PM_REQ_PLAY_END,	/* ARG: not-used			 * PM_REQ_PLAY_END is called just after playing.			 */    PM_REQ_GETFILLABLE,	/* ARG: int			 * Get fillable device queue size			 */    PM_REQ_GETFILLED,	/* ARG: int			 * Get filled device queue size			 */    PM_REQ_OUTPUT_FINISH /* ARG: not-used			  * PM_REQ_OUTPUT_FINISH calls just after the last			  * output_data(), and TiMidity would into			  * waiting to flush the audio buffer.			  */};/* Flag bits */#define PF_PCM_STREAM	(1u<<0)	/* Enable output PCM data */#define PF_MIDI_EVENT	(1u<<1)	/* Enable send MIDI event via acntl() */#define PF_CAN_TRACE	(1u<<2)	/* Enable realtime tracing */#define PF_BUFF_FRAGM_OPT (1u<<3) /* Enable set extra_param[0] to specify				   the number of audio buffer fragments */#define PF_AUTO_SPLIT_FILE (1u<<4) /* Split PCM files automatically */#define IS_STREAM_TRACE	((play_mode->flag & (PF_PCM_STREAM|PF_CAN_TRACE)) == (PF_PCM_STREAM|PF_CAN_TRACE))typedef struct {    int32 rate, encoding, flag;    int fd; /* file descriptor for the audio device	       -1 means closed otherwise opened. It must be -1 by default. */    int32 extra_param[5]; /* System depended parameters			     e.g. buffer fragments, ... */    char *id_name, id_character;    char *name; /* default device or file name */    int (* open_output)(void); /* 0=success, 1=warning, -1=fatal error */    void (* close_output)(void);    int (* output_data)(char *buf, int32 bytes);    /* return: -1=error, otherwise success */    int (* acntl)(int request, void *arg); /* see PM_REQ_* above					    * return: 0=success, -1=fail					    */    int (* detect)(void); /* 0=not available, 1=available */} PlayMode;extern PlayMode *play_mode_list[], *play_mode;extern PlayMode *target_play_mode;extern int audio_buffer_bits;#define audio_buffer_size	(1<<audio_buffer_bits)/* Conversion functions -- These overwrite the int32 data in *lp with   data in another format *//* 8-bit signed and unsigned*/extern void s32tos8(int32 *lp, int32 c);extern void s32tou8(int32 *lp, int32 c);/* 16-bit */extern void s32tos16(int32 *lp, int32 c);extern void s32tou16(int32 *lp, int32 c);/* 24-bit */extern void s32tos24(int32 *lp, int32 c);extern void s32tou24(int32 *lp, int32 c);/* byte-exchanged 16-bit */extern void s32tos16x(int32 *lp, int32 c);extern void s32tou16x(int32 *lp, int32 c);/* uLaw (8 bits) */extern void s32toulaw(int32 *lp, int32 c);/* aLaw (8 bits) */extern void s32toalaw(int32 *lp, int32 c);extern int32 general_output_convert(int32 *buf, int32 count);extern int validate_encoding(int enc, int include_enc, int exclude_enc);extern const char *output_encoding_string(int enc);extern char *create_auto_output_name(const char *input_filename, char *ext_str, char *output_dir, int mode);#if defined(__W32__)#define FILE_OUTPUT_MODE	O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644#elif defined(__MACOS__)#define FILE_OUTPUT_MODE	O_WRONLY|O_CREAT|O_TRUNC#else /* UNIX */#define FILE_OUTPUT_MODE	O_WRONLY|O_CREAT|O_TRUNC, 0644#endif#endif /* ___OUTPUT_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -