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

📄 pulse.c

📁 mips上编译过的mpg 运行正常 环境:AU12
💻 C
字号:
/*	pulse: audio output using PulseAudio server	copyright 2006-7 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 Nicholas J. Humfrey*/#include <stdlib.h>#include <stdio.h>#include <math.h>#include <pulse/simple.h>#include <pulse/error.h>#include "config.h"#include "mpg123app.h"#include "audio.h"#include "module.h"#include "debug.h"#include "sfifo.h"static int open_pulse(audio_output_t *ao){	int err;	pa_simple* pas = NULL;	pa_sample_spec ss;	/* Check if already open ? */	if (ao->userptr) {		error("Pulse audio output is already open.");		return -1;	}	/* Open an audio I/O stream. */	/* When they are < 0, I shall set some default. */	if(ao->rate < 0 || ao->format < 0 || ao->channels < 0)	{		ao->rate     = 44100;		ao->channels = 2;		ao->format   = MPG123_ENC_SIGNED_16;	}	/* Fill out pulse audio's data structure */	ss.channels = ao->channels;	ss.rate = ao->rate;	switch(ao->format) {		case MPG123_ENC_SIGNED_16:#ifdef WORDS_BIGENDIAN			ss.format=PA_SAMPLE_S16BE;#else			ss.format=PA_SAMPLE_S16LE;#endif		break;		case MPG123_ENC_ALAW_8:			ss.format=PA_SAMPLE_ALAW;		break;		case MPG123_ENC_ULAW_8:			ss.format=PA_SAMPLE_ULAW;		break;		case MPG123_ENC_UNSIGNED_8:			ss.format=PA_SAMPLE_U8;		break;		default:			error1("Unsupported audio format: 0x%x", ao->format);			return -1;		break;	}	/* Perform the open */	pas = pa_simple_new(			NULL,				/* Use the default server */			"mpg123",			/* Our application's name */			PA_STREAM_PLAYBACK,			ao->device,			/* Use the default device if NULL */			"MPEG Audio",		/* Description of our stream */			&ss,				/* Our sample format */			NULL,				/* Use default channel map */			NULL,				/* Use default buffering attributes */			&err				/* Error result code */	);	if( pas == NULL ) {		error1("Failed to open pulse audio output: %s", pa_strerror(err));		return -1;	}	/* Store the pointer */	ao->userptr = (void*)pas;	return 0;}static int get_formats_pulse(audio_output_t *ao){	/* Only implemented Signed 16-bit audio for now */	return MPG123_ENC_SIGNED_16;}static int write_pulse(audio_output_t *ao, unsigned char *buf, int len){	pa_simple *pas = (pa_simple*)ao->userptr;	int ret, err;	/* Doesn't return number of bytes but just success or not. */	ret = pa_simple_write( pas, buf, len, &err );	if(ret<0){ error1("Failed to write audio: %s", pa_strerror(err)); return -1; }	return len; /* If successful, everything has been written. */}static int close_pulse(audio_output_t *ao){	pa_simple *pas = (pa_simple*)ao->userptr;	if (pas) {		pa_simple_free( pas );		ao->userptr = NULL;	}		return 0;}static void flush_pulse(audio_output_t *ao){	pa_simple *pas = (pa_simple*)ao->userptr;		if (pas) {		int err;		pa_simple_flush( pas, &err );			if (err) error1("Failed to flush audio: %s", pa_strerror(err));	}}static int init_pulse(audio_output_t* ao){	if (ao==NULL) return -1;	/* Set callbacks */	ao->open = open_pulse;	ao->flush = flush_pulse;	ao->write = write_pulse;	ao->get_formats = get_formats_pulse;	ao->close = close_pulse;	/* Success */	return 0;}/* 	Module information data structure*/mpg123_module_t mpg123_output_module_info = {	/* api_version */	MPG123_MODULE_API_VERSION,	/* name */			"pulse",							/* description */	"Output audio using PulseAudio Server",	/* revision */		"$Rev:$",							/* handle */		NULL,		/* init_output */	init_pulse,						};

⌨️ 快捷键说明

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