comparison scripts/audio/wavwrite.m @ 11587:c792872f8942

all script files: untabify and strip trailing whitespace
author John W. Eaton <jwe@octave.org>
date Thu, 20 Jan 2011 17:35:29 -0500
parents fd0a3ac60b0e
children de3e90a420e3
comparison
equal deleted inserted replaced
11586:12df7854fa7c 11587:c792872f8942
76 error ("wavwrite: Y has more than 32767 columns (too many for a WAV-file)"); 76 error ("wavwrite: Y has more than 32767 columns (too many for a WAV-file)");
77 endif 77 endif
78 78
79 ## determine sample format 79 ## determine sample format
80 switch (bits_per_sample) 80 switch (bits_per_sample)
81 case 8 81 case 8
82 format = "uint8"; 82 format = "uint8";
83 case 16 83 case 16
84 format = "int16"; 84 format = "int16";
85 case 32 85 case 32
86 format = "int32"; 86 format = "int32";
87 otherwise 87 otherwise
88 error ("wavwrite: sample resolution not supported"); 88 error ("wavwrite: sample resolution not supported");
89 endswitch 89 endswitch
90 90
91 ## calculate filesize 91 ## calculate filesize
92 [n, channels] = size(y); 92 [n, channels] = size(y);
93 93
94 ## size of data chunk 94 ## size of data chunk
95 ck_size = n*channels*(bits_per_sample/8); 95 ck_size = n*channels*(bits_per_sample/8);
96 96
97 ## open file for writing binary 97 ## open file for writing binary
98 98
99 if (! ischar (filename)) 99 if (! ischar (filename))
100 error ("wavwrite: expecting FILENAME to be a character string"); 100 error ("wavwrite: expecting FILENAME to be a character string");
101 endif 101 endif
102 102
103 [fid, msg] = fopen (filename, "wb"); 103 [fid, msg] = fopen (filename, "wb");
104 if (fid < 0) 104 if (fid < 0)
105 error ("wavwrite: %s", msg); 105 error ("wavwrite: %s", msg);
106 endif 106 endif
107 107
108 ## write RIFF/WAVE header 108 ## write RIFF/WAVE header
109 c = 0; 109 c = 0;
110 c += fwrite (fid, "RIFF", "uchar"); 110 c += fwrite (fid, "RIFF", "uchar");
111 111
112 ## file size - 8 112 ## file size - 8
130 c += fwrite (fid, bps, "uint32", 0, BYTEORDER); 130 c += fwrite (fid, bps, "uint32", 0, BYTEORDER);
131 131
132 ## block align 132 ## block align
133 c += fwrite (fid, channels*bits_per_sample/8, "uint16", 0, BYTEORDER); 133 c += fwrite (fid, channels*bits_per_sample/8, "uint16", 0, BYTEORDER);
134 134
135 c += fwrite (fid, bits_per_sample, "uint16", 0, BYTEORDER); 135 c += fwrite (fid, bits_per_sample, "uint16", 0, BYTEORDER);
136 c += fwrite (fid, "data", "uchar"); 136 c += fwrite (fid, "data", "uchar");
137 c += fwrite (fid, ck_size, "uint32", 0, BYTEORDER); 137 c += fwrite (fid, ck_size, "uint32", 0, BYTEORDER);
138 138
139 if (c < 25) 139 if (c < 25)
140 fclose (fid); 140 fclose (fid);
141 error ("wavwrite: writing to file failed"); 141 error ("wavwrite: writing to file failed");
142 endif 142 endif
143 143
144 ## interleave samples 144 ## interleave samples
145 yi = reshape (y', n*channels, 1); 145 yi = reshape (y', n*channels, 1);
146 146
147 ## scale samples 147 ## scale samples
148 switch (bits_per_sample) 148 switch (bits_per_sample)
149 case 8 149 case 8
150 yi = round (yi*127 + 128); 150 yi = round (yi*127 + 128);
151 case 16 151 case 16
152 yi = round (yi*32767); 152 yi = round (yi*32767);
153 case 32 153 case 32
154 yi = round (yi*2147483647); 154 yi = round (yi*2147483647);
155 endswitch 155 endswitch
156 156
157 ## write to file 157 ## write to file
158 c = fwrite (fid, yi, format, 0, BYTEORDER); 158 c = fwrite (fid, yi, format, 0, BYTEORDER);
159 159
160 fclose (fid); 160 fclose (fid);
161 161
162 endfunction 162 endfunction
163 163
164 %!test 164 %!test
165 %! A = [1:10; 1:10]/10; 165 %! A = [1:10; 1:10]/10;
166 %! wavwrite("a.wav", A); 166 %! wavwrite("a.wav", A);