ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/PDL-Audio/sndlib/sndinfo.c
Revision: 1.1
Committed: Tue Dec 28 01:05:17 2004 UTC (19 years, 4 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-1_1, rel-1_2, HEAD
Log Message:
*** empty log message ***

File Contents

# Content
1 /* sndinfo describes sounds */
2
3 #if defined(HAVE_CONFIG_H)
4 #include "config.h"
5 #endif
6
7 #include <math.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #if (defined(NEXT) || (defined(HAVE_LIBC_H) && (!defined(HAVE_UNISTD_H))))
11 #include <libc.h>
12 #else
13 #if (!(defined(_MSC_VER))) && (!(defined(MPW_C)))
14 #include <unistd.h>
15 #endif
16 #include <string.h>
17 #endif
18 #include <errno.h>
19
20 #include "sndlib.h"
21
22 #include <time.h>
23
24 #if MACOS
25 #include <console.h>
26 #endif
27
28 /* try to give some info on data formats that aren't supported by sndlib */
29 static char *decode_format(int format, int type)
30 {
31 char *f4;
32 switch (type)
33 {
34 case NeXT_sound_file:
35 switch (format)
36 {
37 case 0: return("unspecified"); break; case 8: return("indirect"); break; case 9: return("nested"); break;
38 case 10: return("dsp_core"); break; case 11: return("dsp_data_8"); break; case 12: return("dsp_data_16"); break;
39 case 13: return("dsp_data_24"); break; case 14: return("dsp_data_32"); break; case 16: return("display"); break;
40 case 17: return("mulaw_squelch"); break; case 18: return("emphasized"); break; case 19: return("compressed"); break;
41 case 20: return("compressed_emphasized"); break; case 21: return("dsp_commands"); break; case 22: return("dsp_commands_samples"); break;
42 case 23: return("adpcm_g721"); break; case 24: return("adpcm_g722"); break; case 25: return("adpcm_g723"); break;
43 case 26: return("adpcm_g723_5"); break; case 28: return("aes"); break; case 29: return("delat_mulaw_8"); break;
44 }
45 break;
46 case AIFC_sound_file:
47 if (format)
48 {
49 f4 = (char *)calloc(5,sizeof(char));
50 #ifdef SNDLIB_LITTLE_ENDIAN
51 sprintf(f4,"%c%c%c%c",format&0xff,(format>>8)&0xff,(format>>16)&0xff,(format>>24)&0xff);
52 #else
53 sprintf(f4,"%c%c%c%c",(format>>24)&0xff,(format>>16)&0xff,(format>>8)&0xff,format&0xff);
54 #endif
55 return(f4);
56 }
57 break;
58 case RIFF_sound_file:
59 switch (format)
60 {
61 case 2: return("ADPCM"); break; case 4: return("VSELP"); break; case 5: return("IBM_CVSD"); break;
62 case 0x10: return("OKI_ADPCM"); break; case 0x11: return("DVI_ADPCM"); break; case 0x12: return("MediaSpace_ADPCM"); break;
63 case 0x13: return("Sierra_ADPCM"); break; case 0x14: return("G723_ADPCM"); break; case 0x15: return("DIGISTD"); break;
64 case 0x16: return("DIGIFIX"); break; case 0x17: return("Dialogic ADPCM"); break; case 0x18: return("Mediavision ADPCM"); break;
65 case 0x19: return("HP cu codec"); break; case 0x20: return("Yamaha_ADPCM"); break; case 0x21: return("SONARC"); break;
66 case 0x22: return("DSPGroup_TrueSpeech"); break; case 0x23: return("EchoSC1"); break; case 0x24: return("AudioFile_AF36"); break;
67 case 0x25: return("APTX"); break; case 0x26: return("AudioFile_AF10"); break; case 0x27: return("prosody 1612"); break;
68 case 0x28: return("lrc"); break; case 0x30: return("Dolby_Ac2"); break; case 0x31: return("GSM610"); break;
69 case 0x32: return("MSN audio codec"); break; case 0x33: return("Antext_ADPCM"); break; case 0x34: return("Control_res_vqlpc"); break;
70 case 0x35: return("DIGIREAL"); break; case 0x36: return("DIGIADPCM"); break; case 0x37: return("Control_res_cr10"); break;
71 case 0x38: return("NMS_VBXADPCM"); break; case 0x39: return("oland rdac"); break; case 0x3a: return("echo sc3"); break;
72 case 0x3b: return("Rockwell adpcm"); break; case 0x3c: return("Rockwell digitalk codec"); break; case 0x3d: return("Xebec"); break;
73 case 0x40: return("G721_ADPCM"); break; case 0x41: return("G728 CELP"); break; case 0x42: return("MS G723"); break;
74 case 0x50: return("MPEG"); break; case 0x52: return("RT24"); break; case 0x53: return("PAC"); break;
75 case 0x55: return("Mpeg layer 3"); break; case 0x59: return("Lucent G723"); break; case 0x60: return("Cirrus"); break;
76 case 0x61: return("ESS Tech pcm"); break; case 0x62: return("voxware "); break; case 0x63: return("canopus atrac"); break;
77 case 0x64: return("G726"); break; case 0x65: return("G722"); break; case 0x66: return("DSAT"); break;
78 case 0x67: return("DSAT display"); break; case 0x69: return("voxware "); break; case 0x70: return("voxware ac8 "); break;
79 case 0x71: return("voxware ac10 "); break; case 0x72: return("voxware ac16"); break; case 0x73: return("voxware ac20"); break;
80 case 0x74: return("voxware rt24"); break; case 0x75: return("voxware rt29"); break; case 0x76: return("voxware rt29hw"); break;
81 case 0x77: return("voxware vr12 "); break; case 0x78: return("voxware vr18"); break; case 0x79: return("voxware tq40"); break;
82 case 0x80: return("softsound"); break; case 0x81: return("voxware tq60 "); break; case 0x82: return("MS RT24"); break;
83 case 0x83: return("G729A"); break; case 0x84: return("MVI_MVI2"); break; case 0x85: return("DF G726"); break;
84 case 0x86: return("DF GSM610"); break; case 0x88: return("isaudio"); break; case 0x89: return("onlive"); break;
85 case 0x91: return("sbc24"); break; case 0x92: return("dolby ac3 spdif"); break; case 0x97: return("zyxel adpcm"); break;
86 case 0x98: return("philips lpcbb"); break; case 0x99: return("packed"); break; case 0x100: return("rhetorex adpcm"); break;
87 case 0x101: return("Irat"); break; case 0x102: return("IBM_alaw?"); break; case 0x103: return("IBM_ADPCM?"); break;
88 case 0x111: return("vivo G723"); break; case 0x112: return("vivo siren"); break; case 0x123: return("digital g273"); break;
89 case 0x200: return("Creative_ADPCM"); break; case 0x202: return("Creative fastspeech 8"); break;
90 case 0x203: return("Creative fastspeech 10"); break;
91 case 0x220: return("quarterdeck"); break; case 0x300: return("FM_TOWNS_SND"); break; case 0x400: return("BTV digital"); break;
92 case 0x680: return("VME vmpcm"); break; case 0x1000: return("OLIGSM"); break; case 0x1001: return("OLIADPCM"); break;
93 case 0x1002: return("OLICELP"); break; case 0x1003: return("OLISBC"); break; case 0x1004: return("OLIOPR"); break;
94 case 0x1100: return("LH codec"); break; case 0x1400: return("Norris"); break; case 0x1401: return("isaudio"); break;
95 case 0x1500: return("Soundspace musicompression"); break; case 0x2000: return("DVM"); break;
96 }
97 break;
98 }
99 return(NULL);
100 }
101
102 int main(int argc, char *argv[])
103 {
104 int chans,srate,samples,format,type;
105 float length;
106 time_t date;
107 char *comment,*header_name;
108 char *format_info,*format_name;
109 char timestr[64];
110 #if MACOS
111 argc = ccommand(&argv);
112 #endif
113 if (argc == 1) {printf("usage: sndinfo file\n"); exit(0);}
114 initialize_sndlib();
115 if (mus_probe_file(argv[1])) /* see if it exists */
116 {
117 date = sound_write_date(argv[1]);
118 srate = sound_srate(argv[1]);
119 chans = sound_chans(argv[1]);
120 samples = sound_samples(argv[1]);
121 comment = sound_comment(argv[1]);
122 length = (float)samples / (float)(chans * srate);
123 type = sound_header_type(argv[1]);
124 header_name = sound_type_name(type);
125 format = sound_data_format(argv[1]);
126 if (format != SNDLIB_UNSUPPORTED)
127 format_info = sound_format_name(format);
128 else
129 {
130 format_info = (char *)calloc(64,sizeof(char));
131 format = sound_original_format(argv[1]);
132 format_name = decode_format(format,type);
133 if (format_name)
134 sprintf(format_info,"%d (%s)",format,format_name);
135 else sprintf(format_info,"%d",format);
136 }
137 #if (!defined(HAVE_CONFIG_H)) || defined(HAVE_STRFTIME)
138 strftime(timestr,64,"%a %d-%b-%Y %H:%M %Z",localtime(&date));
139 #else
140 sprintf(timestr,"who knows?");
141 #endif
142 fprintf(stdout,"%s:\n srate: %d\n chans: %d\n length: %f\n",
143 argv[1],srate,chans,length);
144 fprintf(stdout," type: %s\n format: %s\n written: %s\n comment: %s\n",
145 header_name,
146 format_info,
147 timestr,(comment) ? comment : "");
148 }
149 else
150 fprintf(stderr,"%s: %s\n",argv[1],strerror(errno));
151 return(0);
152 }