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

📄 sndrtool.c

📁 linux下录音程序
💻 C
字号:
/* * Sounder/Sndtool format handler: W V Neisius, February 1992 * * June 28, 93: force output to mono. */#include <math.h>#include <string.h>#ifdef	VMS#include <errno.h>#include <perror.h>#endif#include "st.h"/* Private data used by writer */struct sndpriv {        ULONG nsamples;};#ifndef	SEEK_CUR#define	SEEK_CUR	1#endifvoid  sndtwriteheader(P2(ft_t ft,LONG nsamples));void rawwrite(P3(ft_t, LONG *, LONG));/*======================================================================*//*                         SNDSTARTREAD                                *//*======================================================================*/void sndtstartread(ft)ft_t ft;{char buf[97];LONG rate;rate = 0;/* determine file type */        /* if first 5 bytes == SOUND then this is probably a sndtool sound */        /* if first word (16 bits) == 0          and second word is between 4000 & 25000 then this is sounder sound */        /* otherwise, its probably raw, not handled here */if (fread(buf, 1, 2, ft->fp) != 2)	fail("SND: unexpected EOF");if (strncmp(buf,"\0\0",2) == 0)	{	/* sounder */	rate = rlshort(ft);	if (rate < 4000 || rate > 25000 )		fail ("SND: sample rate out of range");	fseek(ft->fp,4,SEEK_CUR);	}else	{	/* sndtool ? */	fread(&buf[2],1,6,ft->fp);	if (strncmp(buf,"SOUND",5))		fail ("SND: unrecognized SND format");	fseek(ft->fp,12,SEEK_CUR);	rate = rlshort(ft);	fseek(ft->fp,6,SEEK_CUR);	if (fread(buf,1,96,ft->fp) != 96)		fail ("SND: unexpected EOF in SND header");	report ("%s",buf);	}ft->info.channels = 1;ft->info.rate = rate;ft->info.style = UNSIGNED;ft->info.size = BYTE;}/*======================================================================*//*                         SNDTSTARTWRITE                               *//*======================================================================*/void sndtstartwrite(ft)ft_t ft;{struct sndpriv *p = (struct sndpriv *) ft->priv;/* write header */ft->info.channels = 1;ft->info.style = UNSIGNED;ft->info.size = BYTE;p->nsamples = 0;sndtwriteheader(ft, 0);}/*======================================================================*//*                         SNDRSTARTWRITE                               *//*======================================================================*/void sndrstartwrite(ft)ft_t ft;{/* write header */ft->info.channels = 1;ft->info.style = UNSIGNED;ft->info.size = BYTE;/* sounder header */wlshort (ft,0); /* sample size code */wlshort (ft,(int) ft->info.rate);     /* sample rate */wlshort (ft,10);        /* volume */wlshort (ft,4); /* shift */}/*======================================================================*//*                         SNDTWRITE                                     *//*======================================================================*/void sndtwrite(ft, buf, len)ft_t ft;LONG *buf, len;{	struct sndpriv *p = (struct sndpriv *) ft->priv;	p->nsamples += len;	rawwrite(ft, buf, len);}/*======================================================================*//*                         SNDTSTOPWRITE                                *//*======================================================================*/void sndtstopwrite(ft)ft_t ft;{struct sndpriv *p = (struct sndpriv *) ft->priv;/* fixup file sizes in header */if (fseek(ft->fp, 0L, 0) != 0)	fail("can't rewind output file to rewrite SND header");sndtwriteheader(ft, p->nsamples);}/*======================================================================*//*                         SNDTWRITEHEADER                              *//*======================================================================*/void sndtwriteheader(ft,nsamples)ft_t ft;LONG nsamples;{char name_buf[97];/* sndtool header */fputs ("SOUND",ft->fp); /* magic */fputc (0x1a,ft->fp);wlshort (ft,(LONG)0);  /* hGSound */wllong (ft,nsamples);wllong (ft,(LONG)0);wllong (ft,nsamples);wlshort (ft,(int) ft->info.rate);wlshort (ft,0);wlshort (ft,10);wlshort (ft,4);sprintf (name_buf,"%s - File created by Sound Exchange",ft->filename);fwrite (name_buf, 1, 96, ft->fp);}

⌨️ 快捷键说明

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