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

📄 hpux_d_a.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    Functions to play sound on a HP's audio device    Copyright 1997 Lawrence T. Hoff*/#ifdef HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <sys/ioctl.h> #include <sys/audio.h>#include "timidity.h"#include "config.h"#include "output.h"#include "controls.h"static int open_output(void); /* 0=success, 1=warning, -1=fatal error */static void close_output(void);static int output_data(char *buf, int32 bytes);static int acntl(int request, void *arg);/* export the playback mode */#define dpm hpux_play_modePlayMode dpm = {  DEFAULT_RATE, PE_16BIT|PE_SIGNED, PF_PCM_STREAM|PF_CAN_TRACE,  -1,  {0,0,0,0,0}, /* no extra parameters so far */  "HP audio device", 'd',  "/dev/audio",  open_output,  close_output,  output_data,  acntl};/*************************************************************************//*   Encoding will be 16-bit linear signed, unless PE_ULAW is set, in   which case it'll be 8-bit uLaw. I don't think it's worthwhile to   implement any 8-bit linear modes as the sound quality is   unrewarding. PE_MONO is honored.  */static int open_output(void){if (dpm.encoding & PE_ULAW)  dpm.encoding &= ~PE_16BIT;if (!(dpm.encoding & PE_16BIT))  dpm.encoding &= ~PE_BYTESWAP;dpm.fd = open(dpm.name, O_WRONLY, 0);if(dpm.fd == -1)    {      ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: %s",	   dpm.name, strerror(errno));      return -1;    }(void) ioctl(dpm.fd, AUDIO_SET_SAMPLE_RATE, dpm.rate);(void) ioctl(dpm.fd, AUDIO_SET_DATA_FORMAT, (dpm.encoding & PE_16BIT)?	AUDIO_FORMAT_LINEAR16BIT: AUDIO_FORMAT_ULAW);(void) ioctl(dpm.fd, AUDIO_SET_CHANNELS, (dpm.encoding & PE_MONO)?1:2);/* set some reasonable buffer size */(void) ioctl(dpm.fd, AUDIO_SET_TXBUFSIZE, 128*1024);return 0;}static int output_data(char *buf, int32 nbytes){    return write(dpm.fd, buf, nbytes);}static void close_output(void){    if(dpm.fd != -1)    {	/* free resources */	close(dpm.fd);	dpm.fd = -1;    }}static int acntl(int request, void *arg){    switch(request)    {      case PM_REQ_DISCARD:	return ioctl(dpm.fd, AUDIO_RESET, RESET_TX_BUF);    }    return -1;}

⌨️ 快捷键说明

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