#ifndef __AKAIUTIL_WAV_H #define __AKAIUTIL_WAV_H /* * Copyright (C) 2010,2019 Klaus Michael Indlekofer. All rights reserved. * * m.indlekofer@gmx.de * * 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. */ #include "commoninclude.h" /* RIFF WAVE format header */ /* Note: WAV-file is little-endian!!! */ struct wav_riffhead_s{ /* begin RIFFWAVEChunk */ #define WAV_RIFFHEAD_RIFFSTR "RIFF" char riffstr[4]; /* must be "RIFF" */ u_char fsize[4]; /* following file-size in Bytes */ #define WAV_RIFFHEAD_WAVESTR "WAVE" char wavestr[4]; /* must be "WAVE" */ /* end RIFFWAVEChunk */ }; struct wav_chunkhead_s{ char typestr[4]; /* chunk type */ u_char csize[4]; /* following chunk-size in Bytes */ }; #define WAV_CHUNKHEAD_FMTSTR "fmt " #define WAV_CHUNKHEAD_DATASTR "data" struct wav_fmthead_s{ /* continued FormatChunk */ #define WAV_HEAD_FTAG_PCM 0x0001 /* 1: PCM/umcompressed */ u_char ftag[2]; /* format tag */ u_char chnr[2]; /* number of channels */ u_char srate[4]; /* sample rate in samples/sec */ u_char drate[4]; /* total data rate in Bytes/sec */ u_char balign[2]; /* number of Bytes per sample * chnr */ u_char bitnr[2]; /* number of Bits per sample */ /* end FormatChunk */ }; #define WAV_HEAD_SIZE (sizeof(struct wav_riffhead_s)+sizeof(struct wav_chunkhead_s)+sizeof(struct wav_fmthead_s)+sizeof(struct wav_chunkhead_s)) #ifndef WAV_AKAIHEAD_DISABLE /* AKAI header chunks */ #define WAV_CHUNKHEAD_AKAIS900SAMPLEHEADSTR "S9H " #define WAV_CHUNKHEAD_AKAIS1000SAMPLEHEADSTR "S1H " #define WAV_CHUNKHEAD_AKAIS3000SAMPLEHEADSTR "S3H " #define WAV_CHUNKHEAD_AKAIDDTAKEHEADSTR "TKH " #endif /* Declarations */ extern int wav_write_head(int outdes, u_int datasize,u_int chnr,u_int samprate,u_int bitnr, u_int extrasize); extern int wav_read_head(int indes,u_int *bcountp, u_int *datasizep,u_int *chnrp,u_int *sampratep,u_int *bitnrp, u_int *extrasizep, char **errstrp); #ifndef WAV_AKAIHEAD_DISABLE #define WAV_AKAIHEADTYPE_NONE 0x00 #define WAV_AKAIHEADTYPE_SAMPLE900 0x09 #define WAV_AKAIHEADTYPE_SAMPLE1000 0x01 #define WAV_AKAIHEADTYPE_SAMPLE3000 0x03 #define WAV_AKAIHEADTYPE_DDTAKE 0xdd int wav_find_akaihead(int indes,u_int *bcountp,u_int *csizep,u_int remain,u_int searchtype); #endif #endif /* !__AKAIUTIL_WAV_H */