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

📄 mix.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 4 页
字号:
#endif	for (i = 0; i < count; i++) {		s = *sp++;		MIXATION(left);	}}#ifdef ENABLE_PAN_DELAYstatic inline void mix_mystery_signal(		mix_t *sp, int32 *lp, int v, int count){	Voice *vp = voice + v;	final_volume_t left = vp->left_mix, right = vp->right_mix;	int cc, i;	mix_t s;#ifdef SMOOTH_MIXING	int32 linear_left, linear_right;#endif	int32 pan_delay_wpt = vp->pan_delay_wpt, *pan_delay_buf = vp->pan_delay_buf,		pan_delay_spt = vp->pan_delay_spt;	if (! (cc = vp->control_counter)) {		cc = control_ratio;		if (update_signal(v))			/* Envelope ran out */			return;		left = vp->left_mix;		right = vp->right_mix;	}#ifdef SMOOTH_MIXING	compute_mix_smoothing(vp);#endif	while (count)		if (cc < count) {			count -= cc;#ifdef SMOOTH_MIXING			linear_left = FROM_FINAL_VOLUME(left);			if (vp->left_mix_offset) {				linear_left += vp->left_mix_offset;				if (linear_left > MAX_AMP_VALUE) {					linear_left = MAX_AMP_VALUE;					vp->left_mix_offset = 0;				}				left = FINAL_VOLUME(linear_left);			}			linear_right = FROM_FINAL_VOLUME(right);			if (vp->right_mix_offset) {				linear_right += vp->right_mix_offset;				if (linear_right > MAX_AMP_VALUE) {					linear_right = MAX_AMP_VALUE;					vp->right_mix_offset = 0;				}				right = FINAL_VOLUME(linear_right);			}			if(vp->pan_delay_rpt == 0) {				for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)						&& i < cc; i++) {					s = *sp++;					MIXATION(left);					MIXATION(right);					if (vp->left_mix_offset) {						vp->left_mix_offset += vp->left_mix_inc;						linear_left += vp->left_mix_inc;						if (linear_left > MAX_AMP_VALUE) {							linear_left = MAX_AMP_VALUE;							vp->left_mix_offset = 0;						}						left = FINAL_VOLUME(linear_left);					}					if (vp->right_mix_offset) {						vp->right_mix_offset += vp->right_mix_inc;						linear_right += vp->right_mix_inc;						if (linear_right > MAX_AMP_VALUE) {							linear_right = MAX_AMP_VALUE;							vp->right_mix_offset = 0;						}						right = FINAL_VOLUME(linear_right);					}				}			} else if(vp->panning < 64) {				for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)						&& i < cc; i++) {					s = *sp++;					MIXATION(left);					DELAYED_MIXATION(right);					if (vp->left_mix_offset) {						vp->left_mix_offset += vp->left_mix_inc;						linear_left += vp->left_mix_inc;						if (linear_left > MAX_AMP_VALUE) {							linear_left = MAX_AMP_VALUE;							vp->left_mix_offset = 0;						}						left = FINAL_VOLUME(linear_left);					}					if (vp->right_mix_offset) {						vp->right_mix_offset += vp->right_mix_inc;						linear_right += vp->right_mix_inc;						if (linear_right > MAX_AMP_VALUE) {							linear_right = MAX_AMP_VALUE;							vp->right_mix_offset = 0;						}						right = FINAL_VOLUME(linear_right);					}				}			} else {				for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)						&& i < cc; i++) {					s = *sp++;					DELAYED_MIXATION(left);					MIXATION(right);					if (vp->left_mix_offset) {						vp->left_mix_offset += vp->left_mix_inc;						linear_left += vp->left_mix_inc;						if (linear_left > MAX_AMP_VALUE) {							linear_left = MAX_AMP_VALUE;							vp->left_mix_offset = 0;						}						left = FINAL_VOLUME(linear_left);					}					if (vp->right_mix_offset) {						vp->right_mix_offset += vp->right_mix_inc;						linear_right += vp->right_mix_inc;						if (linear_right > MAX_AMP_VALUE) {							linear_right = MAX_AMP_VALUE;							vp->right_mix_offset = 0;						}						right = FINAL_VOLUME(linear_right);					}				}			}			vp->old_left_mix = linear_left;			vp->old_right_mix = linear_right;			cc -= i;#endif			if(vp->pan_delay_rpt == 0) {				for (i = 0; i < cc; i++) {					s = *sp++;					MIXATION(left);					MIXATION(right);				}			} else if(vp->panning < 64) {				for (i = 0; i < cc; i++) {					s = *sp++;					MIXATION(left);					DELAYED_MIXATION(right);				}			} else {				for (i = 0; i < cc; i++) {					s = *sp++;					DELAYED_MIXATION(left);					MIXATION(right);				}			}			cc = control_ratio;			if (update_signal(v))				/* Envelope ran out */				return;			left = vp->left_mix;			right = vp->right_mix;#ifdef SMOOTH_MIXING			compute_mix_smoothing(vp);#endif		} else {			vp->control_counter = cc - count;#ifdef SMOOTH_MIXING			linear_left = FROM_FINAL_VOLUME(left);			if (vp->left_mix_offset) {				linear_left += vp->left_mix_offset;				if (linear_left > MAX_AMP_VALUE) {					linear_left = MAX_AMP_VALUE;					vp->left_mix_offset = 0;				}				left = FINAL_VOLUME(linear_left);			}			linear_right = FROM_FINAL_VOLUME(right);			if (vp->right_mix_offset) {				linear_right += vp->right_mix_offset;				if (linear_right > MAX_AMP_VALUE) {					linear_right = MAX_AMP_VALUE;					vp->right_mix_offset = 0;				}				right = FINAL_VOLUME(linear_right);			}			if(vp->pan_delay_rpt == 0) {				for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)						&& i < count; i++) {					s = *sp++;					MIXATION(left);					MIXATION(right);					if (vp->left_mix_offset) {						vp->left_mix_offset += vp->left_mix_inc;						linear_left += vp->left_mix_inc;						if (linear_left > MAX_AMP_VALUE) {							linear_left = MAX_AMP_VALUE;							vp->left_mix_offset = 0;						}						left = FINAL_VOLUME(linear_left);					}					if (vp->right_mix_offset) {						vp->right_mix_offset += vp->right_mix_inc;						linear_right += vp->right_mix_inc;						if (linear_right > MAX_AMP_VALUE) {							linear_right = MAX_AMP_VALUE;							vp->right_mix_offset = 0;						}						right = FINAL_VOLUME(linear_right);					}				}			} else if(vp->panning < 64) {				for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)						&& i < count; i++) {					s = *sp++;					MIXATION(left);					DELAYED_MIXATION(right);					if (vp->left_mix_offset) {						vp->left_mix_offset += vp->left_mix_inc;						linear_left += vp->left_mix_inc;						if (linear_left > MAX_AMP_VALUE) {							linear_left = MAX_AMP_VALUE;							vp->left_mix_offset = 0;						}						left = FINAL_VOLUME(linear_left);					}					if (vp->right_mix_offset) {						vp->right_mix_offset += vp->right_mix_inc;						linear_right += vp->right_mix_inc;						if (linear_right > MAX_AMP_VALUE) {							linear_right = MAX_AMP_VALUE;							vp->right_mix_offset = 0;						}						right = FINAL_VOLUME(linear_right);					}				}			} else {				for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)						&& i < count; i++) {					s = *sp++;					DELAYED_MIXATION(left);					MIXATION(right);					if (vp->left_mix_offset) {						vp->left_mix_offset += vp->left_mix_inc;						linear_left += vp->left_mix_inc;						if (linear_left > MAX_AMP_VALUE) {							linear_left = MAX_AMP_VALUE;							vp->left_mix_offset = 0;						}						left = FINAL_VOLUME(linear_left);					}					if (vp->right_mix_offset) {						vp->right_mix_offset += vp->right_mix_inc;						linear_right += vp->right_mix_inc;						if (linear_right > MAX_AMP_VALUE) {							linear_right = MAX_AMP_VALUE;							vp->right_mix_offset = 0;						}						right = FINAL_VOLUME(linear_right);					}				}			}			vp->old_left_mix = linear_left;			vp->old_right_mix = linear_right;			count -= i;#endif			if(vp->pan_delay_rpt == 0) {				for (i = 0; i < count; i++) {					s = *sp++;					MIXATION(left);					MIXATION(right);				}			} else if(vp->panning < 64) {				for (i = 0; i < count; i++) {					s = *sp++;					MIXATION(left);					DELAYED_MIXATION(right);				}			} else {				for (i = 0; i < count; i++) {					s = *sp++;					DELAYED_MIXATION(left);					MIXATION(right);				}			}			vp->pan_delay_wpt = pan_delay_wpt;			vp->pan_delay_spt = pan_delay_spt;			return;		}}#else	/* ENABLE_PAN_DELAY */static inline void mix_mystery_signal(		mix_t *sp, int32 *lp, int v, int count){	Voice *vp = voice + v;	final_volume_t left = vp->left_mix, right = vp->right_mix;	int cc, i;	mix_t s;#ifdef SMOOTH_MIXING	int32 linear_left, linear_right;#endif	if (! (cc = vp->control_counter)) {		cc = control_ratio;		if (update_signal(v))			/* Envelope ran out */			return;		left = vp->left_mix;		right = vp->right_mix;	}#ifdef SMOOTH_MIXING	compute_mix_smoothing(vp);#endif	while (count)		if (cc < count) {			count -= cc;#ifdef SMOOTH_MIXING			linear_left = FROM_FINAL_VOLUME(left);			if (vp->left_mix_offset) {				linear_left += vp->left_mix_offset;				if (linear_left > MAX_AMP_VALUE) {					linear_left = MAX_AMP_VALUE;					vp->left_mix_offset = 0;				}				left = FINAL_VOLUME(linear_left);			}			linear_right = FROM_FINAL_VOLUME(right);			if (vp->right_mix_offset) {				linear_right += vp->right_mix_offset;				if (linear_right > MAX_AMP_VALUE) {					linear_right = MAX_AMP_VALUE;					vp->right_mix_offset = 0;				}				right = FINAL_VOLUME(linear_right);			}			for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)					&& i < cc; i++) {				s = *sp++;				MIXATION(left);				MIXATION(right);				if (vp->left_mix_offset) {					vp->left_mix_offset += vp->left_mix_inc;					linear_left += vp->left_mix_inc;					if (linear_left > MAX_AMP_VALUE) {						linear_left = MAX_AMP_VALUE;						vp->left_mix_offset = 0;					}					left = FINAL_VOLUME(linear_left);				}				if (vp->right_mix_offset) {					vp->right_mix_offset += vp->right_mix_inc;					linear_right += vp->right_mix_inc;					if (linear_right > MAX_AMP_VALUE) {						linear_right = MAX_AMP_VALUE;						vp->right_mix_offset = 0;					}					right = FINAL_VOLUME(linear_right);				}			}			vp->old_left_mix = linear_left;			vp->old_right_mix = linear_right;			cc -= i;#endif			for (i = 0; i < cc; i++) {				s = *sp++;				MIXATION(left);				MIXATION(right);			}			cc = control_ratio;			if (update_signal(v))				/* Envelope ran out */				return;			left = vp->left_mix;			right = vp->right_mix;#ifdef SMOOTH_MIXING			compute_mix_smoothing(vp);#endif		} else {			vp->control_counter = cc - count;#ifdef SMOOTH_MIXING			linear_left = FROM_FINAL_VOLUME(left);			if (vp->left_mix_offset) {				linear_left += vp->left_mix_offset;				if (linear_left > MAX_AMP_VALUE) {					linear_left = MAX_AMP_VALUE;					vp->left_mix_offset = 0;				}				left = FINAL_VOLUME(linear_left);			}			linear_right = FROM_FINAL_VOLUME(right);			if (vp->right_mix_offset) {				linear_right += vp->right_mix_offset;				if (linear_right > MAX_AMP_VALUE) {					linear_right = MAX_AMP_VALUE;					vp->right_mix_offset = 0;				}				right = FINAL_VOLUME(linear_right);			}			for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)					&& i < count; i++) {				s = *sp++;				MIXATION(left);				MIXATION(right);				if (vp->left_mix_offset) {					vp->left_mix_offset += vp->left_mix_inc;					linear_left += vp->left_mix_inc;					if (linear_left > MAX_AMP_VALUE) {						linear_left = MAX_AMP_VALUE;						vp->left_mix_offset = 0;					}					left = FINAL_VOLUME(linear_left);				}				if (vp->right_mix_offset) {					vp->right_mix_offset += vp->right_mix_inc;					linear_right += vp->right_mix_inc;					if (linear_right > MAX_AMP_VALUE) {						linear_right = MAX_AMP_VALUE;						vp->right_mix_offset = 0;					}					right = FINAL_VOLUME(linear_right);				}			}			vp->old_left_mix = linear_left;			vp->old_right_mix = linear_right;			count -= i;#endif			for (i = 0; i < count; i++) {				s = *sp++;				MIXATION(left);				MIXATION(right);			}			return;		}}#endif	/* ENABLE_PAN_DELAY */#ifdef ENABLE_PAN_DELAYstatic inline void mix_mystery(mix_t *sp, int32 *lp, int v, int count){	final_volume_t left = voice[v].left_mix, right = voice[v].right_mix;	mix_t s;	int i;#ifdef SMOOTH_MIXING	Voice *vp = voice + v;	int32 linear_left, linear_right;#endif	int32 pan_delay_wpt = vp->pan_delay_wpt, *pan_delay_buf = vp->pan_delay_buf,		pan_delay_spt = vp->pan_delay_spt;#ifdef SMOOTH_MIXING	compute_mix_smoothing(vp);	linear_left = FROM_FINAL_VOLUME(left);	if (vp->left_mix_offset) {		linear_left += vp->left_mix_offset;		if (linear_left > MAX_AMP_VALUE) {			linear_left = MAX_AMP_VALUE;			vp->left_mix_offset = 0;		}		left = FINAL_VOLUME(linear_left);	}	linear_right = FROM_FINAL_VOLUME(right);	if (vp->right_mix_offset) {		linear_right += vp->right_mix_offset;		if (linear_right > MAX_AMP_VALUE) {			linear_right = MAX_AMP_VALUE;			vp->right_mix_offset = 0;		}		right = FINAL_VOLUME(linear_right);	}	if(vp->pan_delay_rpt == 0) {		for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)				&& i < count; i++) {			s = *sp++;			MIXATION(left);			MIXATION(right);			if (vp->left_mix_offset) {				vp->left_mix_offset += vp->left_mix_inc;				linear_left += vp->left_mix_inc;				if (linear_left > MAX_AMP_VALUE) {					linear_left = MAX_AMP_VALUE;					vp->left_mix_offset = 0;				}				left = FINAL_VOLUME(linear_left);			}			if (vp->right_mix_offset) {				vp->right_mix_offset += vp->right_mix_inc;				linear_right += vp->right_mix_inc;				if (linear_right > MAX_AMP_VALUE) {					linear_right = MAX_AMP_VALUE;					vp->right_mix_offset = 0;				}				right = FINAL_VOLUME(linear_right);			}		}	} else if(vp->panning < 64) {		for (i = 0; (vp->left_mix_offset | vp->right_mix_offset)				&& i < count; i++) {			s = *sp++;

⌨️ 快捷键说明

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