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

📄 audio.c

📁 MPEG2/MPEG4编解码参考程序(实现了MPEG4的部分功能)
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************MPEG-4 Audio VMAudio i/o moduleThis software module was originally developed byHeiko Purnhagen (University of Hannover / ACTS-MoMuSys)and edited byin the course of development of the MPEG-2 NBC/MPEG-4 Audio standardISO/IEC 13818-7, 14496-1,2 and 3. This software module is animplementation of a part of one or more MPEG-2 NBC/MPEG-4 Audio toolsas specified by the MPEG-2 NBC/MPEG-4 Audio standard. ISO/IEC givesusers of the MPEG-2 NBC/MPEG-4 Audio standards free license to thissoftware module or modifications thereof for use in hardware orsoftware products claiming conformance to the MPEG-2 NBC/ MPEG-4 Audiostandards. Those intending to use this software module in hardware orsoftware products are advised that this use may infringe existingpatents. The original developer of this software module and his/hercompany, the subsequent editors and their companies, and ISO/IEC haveno liability for use of this software module or modifications thereofin an implementation. Copyright is not released for non MPEG-2NBC/MPEG-4 Audio conforming products. The original developer retainsfull right to use the code for his/her own purpose, assign or donatethe code to a third party and to inhibit third party from using thecode for non MPEG-2 NBC/MPEG-4 Audio conforming products. Thiscopyright notice must be included in all copies or derivative works.Copyright (c) 1996, 1999.Source file: audio.c$Id: audio.c,v 1.13 1999/05/19 15:18:15 purnhage Exp $Required libraries:libtsp.a		AFsp audio file libraryRequired modules:common.o		common moduleaustream.o		audio i/o streams (.au format)Authors:HP    Heiko Purnhagen, Uni Hannover <purnhage@tnt.uni-hannover.de>BT    Bodo Teichmann, FhG/IIS <tmn@iis.fhg.de>Changes:21-jan-97   HP    born (using AFsp-V2R2)27-jan-97   HP    set unavailable samples to 0 in AudioReadData()03-feb-97   HP    fix bug AudioInit formatString=NULL19-feb-97   HP    made internal data structures invisible21-feb-97   BT    raw: big-endian12-sep-97   HP    fixed numSample bug for mch files in AudioOpenRead()30-dec-98   HP    uses austream for stdin/stdout, evaluates USE_AFSP07-jan-99   HP    AFsp-v4r1 (AFsp-V3R2 still supported)11-jan-99   HP    clipping & seeking for austream module17-jan-99   HP    fixed quantisation to 16 bit26-jan-99   HP    improved output file format evaluation17-may-99   HP    improved output file format detection**********************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#ifdef USE_AFSP#include <libtsp.h>		/* AFsp audio file library */#include <libtsp/AFpar.h>	/* AFsp audio file library - definitions */#endif#include "audio.h"		/* audio i/o module */#include "common_m4a.h"		/* common module */#include "austream.h"		/* audio i/o streams (.au format) *//* ---------- declarations ---------- */#define SAMPLE_BUF_SIZE 16384	/* local sample buffer size */#define min(a,b) ((a) < (b) ? (a) : (b))#define max(a,b) ((a) > (b) ? (a) : (b))#ifdef USE_AFSP#ifdef FW_SUN/* only AFsp-V3R2 available: map AFsp-V3R2 to AFsp-v4r1 */#define AFsetNHpar AFsetNH#define FTW_AU (FW_SUN/256)#define FTW_WAVE (FW_WAVE/256)#define FTW_AIFF_C (FW_AIFF_C/256)#define FTW_NH_EB (FW_NH_EB/256)#endif#endif/* ---------- declarations (structures) ---------- */struct AudioFileStruct		/* audio file handle */{#ifdef USE_AFSP  AFILE *file;			/* AFILE handle */#else  int *file;#endif  AuStream *stream;		/* AuStream handle */				/*   NULL if AFsp used */  int numChannel;		/* number of channels */  long currentSample;		/* number of samples read/written */				/* (samples per channel!) */  int write;			/* 0=read  1=write */  long numClip;			/* number of samples clipped */};/* ---------- variables ---------- */static int AUdebugLevel = 0;	/* debug level *//* ---------- local functions ---------- */int isfmtstr (char *filename, char *fmtstr)/* isfmtstr returns true if filename has extension fmtstr */{  int i;  i = strlen(filename)-strlen(fmtstr);  if (i<0)    return 0;  filename += i;  while (*filename) {    if (tolower(*filename) != *fmtstr)      return 0;    filename++;    fmtstr++;  }  return 1;}/* ---------- functions ---------- *//* AudioInit() *//* Init audio i/o module. *//* formatString options: see AFsp documentation */void AudioInit (  char *formatString,		/* in: file format for headerless files */  int debugLevel)		/* in: debug level */				/*     0=off  1=basic  2=full */{  AUdebugLevel = debugLevel;  if (AUdebugLevel >= 1) {    printf("AudioInit: formatString=\"%s\"\n",	   (formatString!=NULL)?formatString:"(null)");    printf("AudioInit: debugLevel=%d\n",AUdebugLevel);#ifdef USE_AFSP    printf("AudioInit: all AFsp file formats supported\n");#else    printf("AudioInit: only 16 bit .au format supported\n");#endif  }#ifdef USE_AFSP  if (formatString!=NULL)    AFsetNHpar(formatString);   /* headerless file support */#endif}/* AudioOpenRead() *//* Open audio file for reading. */AudioFile *AudioOpenRead (  char *fileName,		/* in: file name */				/*     "-": stdin (only 16 bit .au) */  int *numChannel,		/* out: number of channels */  float *fSample,		/* out: sampling frequency [Hz] */  long *numSample)		/* out: number of samples in file */				/*      (samples per channel!) */				/*      or 0 if not available */				/* returns: */				/*  audio file (handle) */				/*  or NULL if error */{  AudioFile *file;#ifdef USE_AFSP  AFILE *af;#else  int *af;#endif  AuStream *as;  long ns;  long nc;  int nci;  float fs;  if (AUdebugLevel >= 1)    printf("AudioOpenRead: fileName=\"%s\"\n",fileName);  if ((file=(AudioFile*)malloc(sizeof(AudioFile))) == NULL)    CommonExit(1,"AudioOpenRead: memory allocation error");#ifdef USE_AFSP  if (strcmp(fileName,"-")) {    af = AFopenRead(fileName,&ns,&nc,&fs,		    AUdebugLevel?stdout:(FILE*)NULL);    as = NULL;  }  else {#endif    af = NULL;    as = AuOpenRead(fileName,&nci,&fs,&ns);    nc = nci;    ns = max(0,ns);#ifdef USE_AFSP  }#endif  if (as==NULL && af==NULL) {    CommonWarning("AudioOpenRead: error opening audio file %s",fileName);    free(file);    return (AudioFile*)NULL;  }  file->file = af;  file->stream = as;  file->numChannel = nc;  file->currentSample = 0;  file->write = 0;  file->numClip = 0;  *numChannel = nc;  *fSample = fs;  *numSample = ns/nc;  if (AUdebugLevel >= 1)    printf("AudioOpenRead: numChannel=%d  fSample=%.1f  numSample=%ld\n",	   *numChannel,*fSample,*numSample);  return file;}/* AudioOpenWrite() *//* Open audio file for writing. *//* Sample format: 16 bit twos complement, uniform quantisation *//* Supported file formats: (matching substring of format) *//*  au, snd:  Sun (AFsp) audio file *//*  wav:      RIFF WAVE file *//*  aif:      AIFF-C audio file *//*  raw:      headerless (raw) audio file (native byte order) */AudioFile *AudioOpenWrite (  char *fileName,		/* in: file name */				/*     "-": stdout (only 16 bit .au) */  char *format,			/* in: file format (ignored if stdout) */				/*     (au, snd, wav, aif, raw) */  int numChannel,		/* in: number of channels */  float fSample)		/* in: sampling frequency [Hz] */				/* returns: */				/*  audio file (handle) */				/*  or NULL if error */{  AudioFile *file;#ifdef USE_AFSP  AFILE *af;  int fmt;  int fmti;  struct {    char *str;    int fmt;  } fmtstr[] = {    {"au",FTW_AU*256},    {"snd",FTW_AU*256},    {"wav",FTW_WAVE*256},    {"wave",FTW_WAVE*256},    {"aif",FTW_AIFF_C*256},    {"aiff",FTW_AIFF_C*256},    {"aifc",FTW_AIFF_C*256},    {"raw",FTW_NH_EB*256},	/* no header big-endian */    {NULL,-1}  };#else  int *af;  int fmti;  struct {    char *str;    int fmt;  } fmtstr[] = {    {"au",1},    {"snd",1},    {NULL,-1}  };#endif

⌨️ 快捷键说明

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