Mercurial > octave-antonio
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); |