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

📄 esdsample.c

📁 Windows NT声卡驱动VXD
💻 C
字号:
#include "esd.h"#include <stdio.h>#include <stdlib.h>#include <dirent.h>#include <signal.h>#include <string.h>#include <unistd.h>#include <sys/stat.h>/* prototype(s) */void clean_exit(int signum);volatile int terminate = 0;void clean_exit(int signum) {    fprintf( stderr, "received signal %d: terminating...\n", signum );    terminate = 1;    return;}int main(int argc, char **argv){    char buf[ESD_BUF_SIZE];    int sock = -1, rate = ESD_DEFAULT_RATE;    int arg = 0, length = 0, total = 0;    int bits = ESD_BITS16, channels = ESD_STEREO;    int mode = ESD_STREAM, func = ESD_PLAY ;    esd_format_t format = 0;    int sample_id = 0, confirm_id = 0, reget_sample_id = 0;    FILE *source = NULL;    struct stat source_stats;    char *host = NULL;    char *name = NULL;    char filename[ ESD_NAME_MAX ] = "";    int cache_mode = 0; /* cache mode, 1 = data, 0 = file, 2 = existing */        for ( arg = 1 ; arg < argc ; arg++)    {	if (!strcmp("-h",argv[arg]))	{	    printf("usage:\n\t%s [-s server] [-d [-b] [-m] [-r freq]] < file\n",		   argv[0]);	    exit(0);	}	else if ( !strcmp( "-s", argv[ arg ] ) )	    host = argv[ ++arg ];	else if ( !strcmp( "-b", argv[ arg ] ) )	    bits = ESD_BITS8;	else if ( !strcmp( "-m", argv[ arg ] ) )	    channels = ESD_MONO;	else if ( !strcmp( "-d", argv[ arg ] ) )	    cache_mode = 1;	else if ( !strcmp( "-e", argv[ arg ] ) )	    cache_mode = 2;	else if ( !strcmp( "-r", argv[ arg ] ) )	{	    arg++;	    rate = atoi( argv[ arg ] );	} else {	    break;	}    }    /* filename is the next option */    /* construct name */    strncpy( filename, argv[0], ESD_NAME_MAX - 2 );    strcat( filename, ":" );    strncpy( filename + strlen( filename ), argv[ arg ], 	     ESD_NAME_MAX - strlen( filename ) );    name = argv[ arg ];    /* if we see any of these, terminate */    signal( SIGINT, clean_exit );    signal( SIGKILL, clean_exit );    signal( SIGPIPE, clean_exit );    if ( cache_mode == 1 ) {	source = fopen( name, "r" );	if ( source == NULL ) {	    fprintf( stderr, "%s, sample file not specified\n", argv[ 0 ] );	    return -1;	}    	format = bits | channels | mode | func;	printf( "opening socket, format = 0x%08x at %d Hz\n", 		format, rate );   	sock = esd_open_sound( host );	if ( sock <= 0 ) 	    return 1;		stat( name, &source_stats );	sample_id = esd_sample_cache( sock, format, rate, source_stats.st_size, filename );	printf( "sample id is <%d>\n", sample_id );    	while ( ( length = fread( buf, 1, ESD_BUF_SIZE, source ) ) > 0 )	{	    /* fprintf( stderr, "read %d\n", length ); */	    if ( ( length = write( sock, buf, length)  ) <= 0 )		return 1;	    else		total += length;	}		confirm_id = esd_confirm_sample_cache( sock );	if ( sample_id != confirm_id ) {	    printf( "error while caching sample <%d>: confirm returned %d\n",		    sample_id, confirm_id );	    exit( 1 );	}	printf( "sample <%d> uploaded, %d bytes\n", sample_id, total );    }     else if ( cache_mode == 0) {	sock = esd_open_sound( host );	if ( sock <= 0 ) 	    return 1;		sample_id = esd_file_cache( sock, argv[0], name );	printf( "sample id is <%d>\n", sample_id );    	/* if we see any of these, terminate */	if ( sample_id < 0 ) {	    printf( "error while caching sample <%d>: confirm value != sample_id\n",		    sample_id );	    exit( 1 );	}	printf( "sample <%d> uploaded: %s\n", sample_id, filename );    } else if (cache_mode == 2) {	strcpy(filename, name);    }    printf( "name is \'%s\'.\n", filename );    reget_sample_id = esd_sample_getid( sock, filename );    printf( "reget of sample %s id is <%d>\n", filename, reget_sample_id );    if(( reget_sample_id != sample_id && cache_mode != 2)       || reget_sample_id < 0) {	printf( "sample id's do not make sense! (cache mode %d)\n", cache_mode );	exit( 1 );    }    printf( "press \'q\' <enter> to quit, <enter> to trigger.\n" );    while ( !terminate ) {	if ( getchar() == 'q' ) break;	printf( "<playing sample>\n" );	esd_sample_play( sock, sample_id );    }    esd_sample_free( sock, sample_id );    printf( "closing down\n" );    close( sock );    return 0;}

⌨️ 快捷键说明

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