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

📄 optcode.c

📁 MIDI解码程序(用VC编写)
💻 C
字号:
/*    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*/#ifdef HAVE_CONFIG_H#  include "config.h"#endif#ifdef STDC_HEADERS#  include <string.h>#elif HAVE_STRINGS_H#  include <strings.h>#endif /* stdc */#include "timidity.h"#if USE_ALTIVEC#define sizeof_vector 16/* vector version of memset(). */void v_memset(void* destp, int c, size_t len){    register int32 dest = (int)destp;    /* If it's worth using altivec code */    if( len >= 2*sizeof_vector ) { /* 32 byte */        int i,xlen;	int cccc[4] = { c, c, c, c, };        vint32* destv;	vint32  pat = *(vint32*) cccc; 		/* first, write things to word boundary. */	if(( xlen = (int)dest % sizeof_vector ) != 0) {	    libc_memset(destp,c,xlen);	    len  -= xlen;	    dest += xlen;	}	/* this is the maion loop. */	destv = (vint32*) dest;	for( i = 0; i < len / sizeof_vector; i++ ) {  	    destv[i] = pat;	}	dest += i * sizeof_vector;	len %= sizeof_vector;    }    /* write remaining few bytes. */    libc_memset((void*)dest,0,len);}/* a bit faster version. */static vint32 vzero = (vint32)(0);void v_memzero(void* destp, size_t len){    register int32 dest = (int)destp;    /* If it's worth using altivec code */    if( len >= 2*sizeof_vector ) { /* 32 byte */        int i,xlen;        vint32* destv;		/* first, write things to word boundary. */	if(( xlen = (int)dest % sizeof_vector ) != 0) {	    libc_memset(destp,0,xlen);	    len  -= xlen;	    dest += xlen;	}	/* this is the maion loop. */	destv = (vint32*) dest;	for( i = 0; i < len / sizeof_vector; i++ ) {  	    destv[i] = vzero;	}	dest += i * sizeof_vector;	len %= sizeof_vector;    }    /* write remaining few bytes. */    libc_memset((void*)dest,0,len);}/* this is an alternate version of set_dry_signal() in reverb.c */void v_set_dry_signal(void* destp, const int32* buf, int32 n){    int i = 0;    if( n>=8 ) {        vint32* dest = (vint32*) destp;	for( ; i < n / 4; i++) {            dest[i] = vec_add(dest[i],((vint32*) buf)[i]);	}    }    /* write remaining few bytes. */    for( i *= 4; i < n; i++) {        ((int32*) destp)[i] += buf[i];    }}#endif /* USE_ALTIVEC */

⌨️ 快捷键说明

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