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

📄 split.c

📁 linux下录音程序
💻 C
字号:
/* * July 5, 1991 * Copyright 1991 Lance Norskog And Sundry Contributors * This source code is freely redistributable and may be used for * any purpose.  This copyright notice must be maintained.  * Lance Norskog And Sundry Contributors are not responsible for  * the consequences of using this software. *//* *  "split" effect by Lauren Weinstein (lauren@vortex.com); 2/94 *  Splits 1 channel file to 2 channels (stereo), or 4 channels (quad); *  or splits a 2 channel file to 4 channels. */#include <math.h>#include "st.h"/* Private data for split */typedef struct splitstuff {	int	rest;		/* bytes remaining in current block */} *split_t;/* * Process options */voidsplit_getopts(effp, n, argv) eff_t effp;int n;char **argv;{	if (n)		fail("Split effect takes no options.");}/* * Prepare processing. */voidsplit_start(effp)eff_t effp;{	switch (effp->ininfo.channels) {		case 1:   /* 1 channel must split to 2 or 4 */			switch(effp->outinfo.channels) {				case 2:				case 4:					return;			}			break;		case 2:	  /* 2 channels must split to 4 */			switch(effp->outinfo.channels) {				case 4:					return;			}			break;	}	fail("Can't split %d channels into %d channels",		effp->ininfo.channels, effp->outinfo.channels);}/* * Process signed long samples from ibuf to obuf, * isamp or osamp samples, whichever is smaller, * while splitting into appropriate channels. */void split_flow(effp, ibuf, obuf, isamp, osamp)eff_t effp;LONG *ibuf, *obuf;int *isamp, *osamp;{	int len, done; 	switch(effp->ininfo.channels) {		case 1:  /* 1 input channel */			switch(effp->outinfo.channels) {				case 2:  /* split to 2 channels */					len = ((*isamp > *osamp/2) 					      ? *osamp/2 : *isamp);					for(done = 0; done < len; done++) {						obuf[0] = obuf[1] = *ibuf++;						obuf += 2;					}								*isamp = len;					*osamp = len * 2;					break;						case 4:  /* split to 4 channels */					len = ((*isamp > *osamp/4) 					      ? *osamp/4 : *isamp);					for(done = 0; done < len; done++) {						obuf[0] = obuf[1] = obuf[2]					 	  = obuf[3] = *ibuf++;						obuf += 4;					}					*isamp = len;					*osamp = len * 4;					break;			}			break;		case 2:  /* 2 input channels; split to 4 channels  */			 /* We're using the same channel ordering  */			 /* as in "avg.c"--sure hope it's correct! */			len = ((*isamp/2 > *osamp/4) 			      ? *osamp/4 : *isamp/2);			for(done = 0; done < len; done++) {				obuf[0] = obuf[2] = ibuf[0];				obuf[1] = obuf[3] = ibuf[1];				ibuf += 2;				obuf += 4;			}			*isamp = len;			*osamp = len * 2;			break;	}}/* * Do anything required when you stop reading samples.   * Don't close input file!  */void split_stop(effp)eff_t effp;{	/* nothing to do */}

⌨️ 快捷键说明

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