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

📄 alib.c

📁 mips上编译过的mpg 运行正常 环境:AU12
💻 C
字号:
/*	alib: audio output for HP-UX using alib	copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1	see COPYING and AUTHORS files in distribution or http://mpg123.org	initially written by Erwan Ducroquet	based on source code from HP (Audio SDK)*//* * * for mpg123 : * hpux: *  $(MAKE) \ *  CC=cc \ *  LDFLAGS=-L/opt/audio/lib \ *  AUDIO_LIB=-lAlib \ *  OBJECTS=decode.o dct64.o \ *  CFLAGS=-Ae +O3 -DREAL_IS_FLOAT -D_HPUX_SOURCE -DHPUX -I/opt/audio/include \ *  mpg123 *//* * For the user : * If you launch mpg123 on a XTerm with sound capabilities, it's OK * Else, you have to set the environment variable "AUDIO" to the name of * an HP Xterm with sound card. *//**************************************************************************/#include "mpg123app.h"#include <fcntl.h>#include <sys/socket.h>#include <netdb.h>#include <netinet/in.h>#include <netinet/tcp.h>#include <errno.h>#include <Alib.h>   /* /opt/audio/include */#include <CUlib.h>  /* /opt/audio/include */#include "debug.h"/**************************************************************************//* FIXME: These globals should be moved into a structure */static Audio *audioServer = (Audio *) NULL;static struct protoent *tcpProtocolEntry;static ATransID xid;static void printAudioError(Audio *audio,char *message,int errorCode) {	char    errorbuff[132];	AGetErrorText(audio, errorCode, errorbuff, 131);	error2("%s: %s", message, errorbuff);}static long myHandler(Audio *audio,AErrorEvent *err_event) {	printAudioError( audio, "Audio error", err_event->error_code ); 	/* we cannot just do random exists, that messes terminal up	 need proper error propagation in that case for future, setting intflag or such */	/* exit(1); */}/**************************************************************************//* * Set the fn element of ai * Use ao->rate and ao->channels * Doesn't set any volume *//* return on error leaves stuff dirty here... */static int open_alib(audio_output_t *ao){	AudioAttributes Attribs;	AudioAttrMask   AttribsMask;	AGainEntry      gainEntry[4];	SSPlayParams    playParams;	SStream	  audioStream;	AErrorHandler   prevHandler;	char		  server[1];	int		  i;	long            status;		if (audioServer) {		error("openAudio: audio already open");		return -1;	}		prevHandler = ASetErrorHandler(myHandler);		server[0] = '\0';	audioServer = AOpenAudio( server, NULL );	if (audioServer==NULL) {		error("Error: could not open audio\n");		return -1;	}		ao->fn = socket( AF_INET, SOCK_STREAM, 0 );	if(ao->fn<0) {		error("Socket creation failed");		return -1;	}		Attribs.type = ATSampled;	Attribs.attr.sampled_attr.sampling_rate = ao->rate;	Attribs.attr.sampled_attr.channels	  = ao->channels;	Attribs.attr.sampled_attr.data_format	  = ADFLin16;	AttribsMask = ASSamplingRateMask | ASChannelsMask  | ASDataFormatMask;		gainEntry[0].gain = AUnityGain;	gainEntry[0].u.o.out_ch  = AOCTMono;	gainEntry[0].u.o.out_dst = AODTDefaultOutput;		playParams.gain_matrix.type = AGMTOutput;  /* gain matrix */	playParams.gain_matrix.num_entries = 1;	playParams.gain_matrix.gain_entries = gainEntry;	playParams.play_volume = AUnityGain;       /* play volume */	playParams.priority = APriorityNormal;     /* normal priority */	playParams.event_mask = 0;                 /* don't solicit any events */		xid=APlaySStream(audioServer,AttribsMask,&Attribs,	&playParams,&audioStream,NULL);		status=connect(ao->fn,	(struct sockaddr *) &audioStream.tcp_sockaddr,	sizeof(struct sockaddr_in) );	if (status<0) {		error("Connect failed");		return -1;	}		i=-1;	tcpProtocolEntry=getprotobyname("tcp");	setsockopt(ao->fn,tcpProtocolEntry->p_proto,TCP_NODELAY,&i,sizeof(i));		return ao->fn;}/**************************************************************************/static int close_alib(audio_output_t *ao){	close(ao->fn);	ASetCloseDownMode( audioServer, AKeepTransactions, NULL );	ACloseAudio( audioServer, NULL );	audioServer = (Audio *) NULL;	return 0;}/**************************************************************************//* * very simple * deserv to be inline */static int write_alib(audio_output_t *ao,unsigned char *buf,int len){	return write(ao->fn,buf,len*2);}/**************************************************************************/static int get_formats_alib(audio_output_t *ao){	return MPG123_ENC_SIGNED_16;}static void flush_alib(audio_output_t *ao){}static int init_alib(audio_output_t* ao){	if (ao==NULL) return -1;	/* Set callbacks */	ao->open = open_alib;	ao->flush = flush_alib;	ao->write = write_alib;	ao->get_formats = get_formats_alib;	ao->close = close_alib;	/* Success */	return 0;}/* 	Module information data structure*/mpg123_module_t mpg123_output_module_info = {	/* api_version */	MPG123_MODULE_API_VERSION,	/* name */			"alib",							/* description */	"Output audio HP-UX using alib.",	/* revision */		"$Rev:$",							/* handle */		NULL,		/* init_output */	init_alib,						};

⌨️ 快捷键说明

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