00001
00002
00003 #define GSM_MAGIC 0xD
00004
00005 #ifndef GSM_H
00006 typedef unsigned char gsm_byte;
00007 #endif
00008 typedef unsigned char wav_byte;
00009 typedef unsigned int uword;
00010
00011 #define readGSM_33(c1) { \
00012 gsm_byte *c = (c1); \
00013 LARc[0] = (*c++ & 0xF) << 2; \
00014 LARc[0] |= (*c >> 6) & 0x3; \
00015 LARc[1] = *c++ & 0x3F; \
00016 LARc[2] = (*c >> 3) & 0x1F; \
00017 LARc[3] = (*c++ & 0x7) << 2; \
00018 LARc[3] |= (*c >> 6) & 0x3; \
00019 LARc[4] = (*c >> 2) & 0xF; \
00020 LARc[5] = (*c++ & 0x3) << 2; \
00021 LARc[5] |= (*c >> 6) & 0x3; \
00022 LARc[6] = (*c >> 3) & 0x7; \
00023 LARc[7] = *c++ & 0x7; \
00024 Nc[0] = (*c >> 1) & 0x7F; \
00025 bc[0] = (*c++ & 0x1) << 1; \
00026 bc[0] |= (*c >> 7) & 0x1; \
00027 Mc[0] = (*c >> 5) & 0x3; \
00028 xmaxc[0] = (*c++ & 0x1F) << 1; \
00029 xmaxc[0] |= (*c >> 7) & 0x1; \
00030 xmc[0] = (*c >> 4) & 0x7; \
00031 xmc[1] = (*c >> 1) & 0x7; \
00032 xmc[2] = (*c++ & 0x1) << 2; \
00033 xmc[2] |= (*c >> 6) & 0x3; \
00034 xmc[3] = (*c >> 3) & 0x7; \
00035 xmc[4] = *c++ & 0x7; \
00036 xmc[5] = (*c >> 5) & 0x7; \
00037 xmc[6] = (*c >> 2) & 0x7; \
00038 xmc[7] = (*c++ & 0x3) << 1; \
00039 xmc[7] |= (*c >> 7) & 0x1; \
00040 xmc[8] = (*c >> 4) & 0x7; \
00041 xmc[9] = (*c >> 1) & 0x7; \
00042 xmc[10] = (*c++ & 0x1) << 2; \
00043 xmc[10] |= (*c >> 6) & 0x3; \
00044 xmc[11] = (*c >> 3) & 0x7; \
00045 xmc[12] = *c++ & 0x7; \
00046 Nc[1] = (*c >> 1) & 0x7F; \
00047 bc[1] = (*c++ & 0x1) << 1; \
00048 bc[1] |= (*c >> 7) & 0x1; \
00049 Mc[1] = (*c >> 5) & 0x3; \
00050 xmaxc[1] = (*c++ & 0x1F) << 1; \
00051 xmaxc[1] |= (*c >> 7) & 0x1; \
00052 xmc[13] = (*c >> 4) & 0x7; \
00053 xmc[14] = (*c >> 1) & 0x7; \
00054 xmc[15] = (*c++ & 0x1) << 2; \
00055 xmc[15] |= (*c >> 6) & 0x3; \
00056 xmc[16] = (*c >> 3) & 0x7; \
00057 xmc[17] = *c++ & 0x7; \
00058 xmc[18] = (*c >> 5) & 0x7; \
00059 xmc[19] = (*c >> 2) & 0x7; \
00060 xmc[20] = (*c++ & 0x3) << 1; \
00061 xmc[20] |= (*c >> 7) & 0x1; \
00062 xmc[21] = (*c >> 4) & 0x7; \
00063 xmc[22] = (*c >> 1) & 0x7; \
00064 xmc[23] = (*c++ & 0x1) << 2; \
00065 xmc[23] |= (*c >> 6) & 0x3; \
00066 xmc[24] = (*c >> 3) & 0x7; \
00067 xmc[25] = *c++ & 0x7; \
00068 Nc[2] = (*c >> 1) & 0x7F; \
00069 bc[2] = (*c++ & 0x1) << 1; \
00070 bc[2] |= (*c >> 7) & 0x1; \
00071 Mc[2] = (*c >> 5) & 0x3; \
00072 xmaxc[2] = (*c++ & 0x1F) << 1; \
00073 xmaxc[2] |= (*c >> 7) & 0x1; \
00074 xmc[26] = (*c >> 4) & 0x7; \
00075 xmc[27] = (*c >> 1) & 0x7; \
00076 xmc[28] = (*c++ & 0x1) << 2; \
00077 xmc[28] |= (*c >> 6) & 0x3; \
00078 xmc[29] = (*c >> 3) & 0x7; \
00079 xmc[30] = *c++ & 0x7; \
00080 xmc[31] = (*c >> 5) & 0x7; \
00081 xmc[32] = (*c >> 2) & 0x7; \
00082 xmc[33] = (*c++ & 0x3) << 1; \
00083 xmc[33] |= (*c >> 7) & 0x1; \
00084 xmc[34] = (*c >> 4) & 0x7; \
00085 xmc[35] = (*c >> 1) & 0x7; \
00086 xmc[36] = (*c++ & 0x1) << 2; \
00087 xmc[36] |= (*c >> 6) & 0x3; \
00088 xmc[37] = (*c >> 3) & 0x7; \
00089 xmc[38] = *c++ & 0x7; \
00090 Nc[3] = (*c >> 1) & 0x7F; \
00091 bc[3] = (*c++ & 0x1) << 1; \
00092 bc[3] |= (*c >> 7) & 0x1; \
00093 Mc[3] = (*c >> 5) & 0x3; \
00094 xmaxc[3] = (*c++ & 0x1F) << 1; \
00095 xmaxc[3] |= (*c >> 7) & 0x1; \
00096 xmc[39] = (*c >> 4) & 0x7; \
00097 xmc[40] = (*c >> 1) & 0x7; \
00098 xmc[41] = (*c++ & 0x1) << 2; \
00099 xmc[41] |= (*c >> 6) & 0x3; \
00100 xmc[42] = (*c >> 3) & 0x7; \
00101 xmc[43] = *c++ & 0x7; \
00102 xmc[44] = (*c >> 5) & 0x7; \
00103 xmc[45] = (*c >> 2) & 0x7; \
00104 xmc[46] = (*c++ & 0x3) << 1; \
00105 xmc[46] |= (*c >> 7) & 0x1; \
00106 xmc[47] = (*c >> 4) & 0x7; \
00107 xmc[48] = (*c >> 1) & 0x7; \
00108 xmc[49] = (*c++ & 0x1) << 2; \
00109 xmc[49] |= (*c >> 6) & 0x3; \
00110 xmc[50] = (*c >> 3) & 0x7; \
00111 xmc[51] = *c & 0x7; \
00112 }
00113
00114 static inline void conv66(gsm_byte * d, wav_byte * c) {
00115 gsm_byte frame_chain;
00116 unsigned int sr;
00117 unsigned int LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
00118
00119 readGSM_33(d);
00120 sr = 0;
00121 sr = (sr >> 6) | (LARc[0] << 10);
00122 sr = (sr >> 6) | (LARc[1] << 10);
00123 *c++ = sr >> 4;
00124 sr = (sr >> 5) | (LARc[2] << 11);
00125 *c++ = sr >> 7;
00126 sr = (sr >> 5) | (LARc[3] << 11);
00127 sr = (sr >> 4) | (LARc[4] << 12);
00128 *c++ = sr >> 6;
00129 sr = (sr >> 4) | (LARc[5] << 12);
00130 sr = (sr >> 3) | (LARc[6] << 13);
00131 *c++ = sr >> 7;
00132 sr = (sr >> 3) | (LARc[7] << 13);
00133 sr = (sr >> 7) | (Nc[0] << 9);
00134 *c++ = sr >> 5;
00135 sr = (sr >> 2) | (bc[0] << 14);
00136 sr = (sr >> 2) | (Mc[0] << 14);
00137 sr = (sr >> 6) | (xmaxc[0] << 10);
00138 *c++ = sr >> 3;
00139 sr = (sr >> 3 )|( xmc[0] << 13);
00140 *c++ = sr >> 8;
00141 sr = (sr >> 3 )|( xmc[1] << 13);
00142 sr = (sr >> 3 )|( xmc[2] << 13);
00143 sr = (sr >> 3 )|( xmc[3] << 13);
00144 *c++ = sr >> 7;
00145 sr = (sr >> 3 )|( xmc[4] << 13);
00146 sr = (sr >> 3 )|( xmc[5] << 13);
00147 sr = (sr >> 3 )|( xmc[6] << 13);
00148 *c++ = sr >> 6;
00149 sr = (sr >> 3 )|( xmc[7] << 13);
00150 sr = (sr >> 3 )|( xmc[8] << 13);
00151 *c++ = sr >> 8;
00152 sr = (sr >> 3 )|( xmc[9] << 13);
00153 sr = (sr >> 3 )|( xmc[10] << 13);
00154 sr = (sr >> 3 )|( xmc[11] << 13);
00155 *c++ = sr >> 7;
00156 sr = (sr >> 3 )|( xmc[12] << 13);
00157 sr = (sr >> 7 )|( Nc[1] << 9);
00158 *c++ = sr >> 5;
00159 sr = (sr >> 2 )|( bc[1] << 14);
00160 sr = (sr >> 2 )|( Mc[1] << 14);
00161 sr = (sr >> 6 )|( xmaxc[1] << 10);
00162 *c++ = sr >> 3;
00163 sr = (sr >> 3 )|( xmc[13] << 13);
00164 *c++ = sr >> 8;
00165 sr = (sr >> 3 )|( xmc[14] << 13);
00166 sr = (sr >> 3 )|( xmc[15] << 13);
00167 sr = (sr >> 3 )|( xmc[16] << 13);
00168 *c++ = sr >> 7;
00169 sr = (sr >> 3 )|( xmc[17] << 13);
00170 sr = (sr >> 3 )|( xmc[18] << 13);
00171 sr = (sr >> 3 )|( xmc[19] << 13);
00172 *c++ = sr >> 6;
00173 sr = (sr >> 3 )|( xmc[20] << 13);
00174 sr = (sr >> 3 )|( xmc[21] << 13);
00175 *c++ = sr >> 8;
00176 sr = (sr >> 3 )|( xmc[22] << 13);
00177 sr = (sr >> 3 )|( xmc[23] << 13);
00178 sr = (sr >> 3 )|( xmc[24] << 13);
00179 *c++ = sr >> 7;
00180 sr = (sr >> 3 )|( xmc[25] << 13);
00181 sr = (sr >> 7 )|( Nc[2] << 9);
00182 *c++ = sr >> 5;
00183 sr = (sr >> 2 )|( bc[2] << 14);
00184 sr = (sr >> 2 )|( Mc[2] << 14);
00185 sr = (sr >> 6 )|( xmaxc[2] << 10);
00186 *c++ = sr >> 3;
00187 sr = (sr >> 3 )|( xmc[26] << 13);
00188 *c++ = sr >> 8;
00189 sr = (sr >> 3 )|( xmc[27] << 13);
00190 sr = (sr >> 3 )|( xmc[28] << 13);
00191 sr = (sr >> 3 )|( xmc[29] << 13);
00192 *c++ = sr >> 7;
00193 sr = (sr >> 3 )|( xmc[30] << 13);
00194 sr = (sr >> 3 )|( xmc[31] << 13);
00195 sr = (sr >> 3 )|( xmc[32] << 13);
00196 *c++ = sr >> 6;
00197 sr = (sr >> 3 )|( xmc[33] << 13);
00198 sr = (sr >> 3 )|( xmc[34] << 13);
00199 *c++ = sr >> 8;
00200 sr = (sr >> 3 )|( xmc[35] << 13);
00201 sr = (sr >> 3 )|( xmc[36] << 13);
00202 sr = (sr >> 3 )|( xmc[37] << 13);
00203 *c++ = sr >> 7;
00204 sr = (sr >> 3 )|( xmc[38] << 13);
00205 sr = (sr >> 7 )|( Nc[3] << 9);
00206 *c++ = sr >> 5;
00207 sr = (sr >> 2 )|( bc[3] << 14);
00208 sr = (sr >> 2 )|( Mc[3] << 14);
00209 sr = (sr >> 6 )|( xmaxc[3] << 10);
00210 *c++ = sr >> 3;
00211 sr = (sr >> 3 )|( xmc[39] << 13);
00212 *c++ = sr >> 8;
00213 sr = (sr >> 3 )|( xmc[40] << 13);
00214 sr = (sr >> 3 )|( xmc[41] << 13);
00215 sr = (sr >> 3 )|( xmc[42] << 13);
00216 *c++ = sr >> 7;
00217 sr = (sr >> 3 )|( xmc[43] << 13);
00218 sr = (sr >> 3 )|( xmc[44] << 13);
00219 sr = (sr >> 3 )|( xmc[45] << 13);
00220 *c++ = sr >> 6;
00221 sr = (sr >> 3 )|( xmc[46] << 13);
00222 sr = (sr >> 3 )|( xmc[47] << 13);
00223 *c++ = sr >> 8;
00224 sr = (sr >> 3 )|( xmc[48] << 13);
00225 sr = (sr >> 3 )|( xmc[49] << 13);
00226 sr = (sr >> 3 )|( xmc[50] << 13);
00227 *c++ = sr >> 7;
00228 sr = (sr >> 3 )|( xmc[51] << 13);
00229 sr = sr >> 4;
00230 *c = sr >> 8;
00231 frame_chain = *c;
00232 readGSM_33(d+33);
00233
00234
00235 sr = 0;
00236
00237 sr = (sr >> 4 )|( frame_chain << 12);
00238
00239 sr = (sr >> 6 )|( LARc[0] << 10);
00240 *c++ = sr >> 6;
00241 sr = (sr >> 6 )|( LARc[1] << 10);
00242 *c++ = sr >> 8;
00243 sr = (sr >> 5 )|( LARc[2] << 11);
00244 sr = (sr >> 5 )|( LARc[3] << 11);
00245 *c++ = sr >> 6;
00246 sr = (sr >> 4 )|( LARc[4] << 12);
00247 sr = (sr >> 4 )|( LARc[5] << 12);
00248 *c++ = sr >> 6;
00249 sr = (sr >> 3 )|( LARc[6] << 13);
00250 sr = (sr >> 3 )|( LARc[7] << 13);
00251 *c++ = sr >> 8;
00252 sr = (sr >> 7 )|( Nc[0] << 9);
00253 sr = (sr >> 2 )|( bc[0] << 14);
00254 *c++ = sr >> 7;
00255 sr = (sr >> 2 )|( Mc[0] << 14);
00256 sr = (sr >> 6 )|( xmaxc[0] << 10);
00257 *c++ = sr >> 7;
00258 sr = (sr >> 3 )|( xmc[0] << 13);
00259 sr = (sr >> 3 )|( xmc[1] << 13);
00260 sr = (sr >> 3 )|( xmc[2] << 13);
00261 *c++ = sr >> 6;
00262 sr = (sr >> 3 )|( xmc[3] << 13);
00263 sr = (sr >> 3 )|( xmc[4] << 13);
00264 *c++ = sr >> 8;
00265 sr = (sr >> 3 )|( xmc[5] << 13);
00266 sr = (sr >> 3 )|( xmc[6] << 13);
00267 sr = (sr >> 3 )|( xmc[7] << 13);
00268 *c++ = sr >> 7;
00269 sr = (sr >> 3 )|( xmc[8] << 13);
00270 sr = (sr >> 3 )|( xmc[9] << 13);
00271 sr = (sr >> 3 )|( xmc[10] << 13);
00272 *c++ = sr >> 6;
00273 sr = (sr >> 3 )|( xmc[11] << 13);
00274 sr = (sr >> 3 )|( xmc[12] << 13);
00275 *c++ = sr >> 8;
00276 sr = (sr >> 7 )|( Nc[1] << 9);
00277 sr = (sr >> 2 )|( bc[1] << 14);
00278 *c++ = sr >> 7;
00279 sr = (sr >> 2 )|( Mc[1] << 14);
00280 sr = (sr >> 6 )|( xmaxc[1] << 10);
00281 *c++ = sr >> 7;
00282 sr = (sr >> 3 )|( xmc[13] << 13);
00283 sr = (sr >> 3 )|( xmc[14] << 13);
00284 sr = (sr >> 3 )|( xmc[15] << 13);
00285 *c++ = sr >> 6;
00286 sr = (sr >> 3 )|( xmc[16] << 13);
00287 sr = (sr >> 3 )|( xmc[17] << 13);
00288 *c++ = sr >> 8;
00289 sr = (sr >> 3 )|( xmc[18] << 13);
00290 sr = (sr >> 3 )|( xmc[19] << 13);
00291 sr = (sr >> 3 )|( xmc[20] << 13);
00292 *c++ = sr >> 7;
00293 sr = (sr >> 3 )|( xmc[21] << 13);
00294 sr = (sr >> 3 )|( xmc[22] << 13);
00295 sr = (sr >> 3 )|( xmc[23] << 13);
00296 *c++ = sr >> 6;
00297 sr = (sr >> 3 )|( xmc[24] << 13);
00298 sr = (sr >> 3 )|( xmc[25] << 13);
00299 *c++ = sr >> 8;
00300 sr = (sr >> 7 )|( Nc[2] << 9);
00301 sr = (sr >> 2 )|( bc[2] << 14);
00302 *c++ = sr >> 7;
00303 sr = (sr >> 2 )|( Mc[2] << 14);
00304 sr = (sr >> 6 )|( xmaxc[2] << 10);
00305 *c++ = sr >> 7;
00306 sr = (sr >> 3 )|( xmc[26] << 13);
00307 sr = (sr >> 3 )|( xmc[27] << 13);
00308 sr = (sr >> 3 )|( xmc[28] << 13);
00309 *c++ = sr >> 6;
00310 sr = (sr >> 3 )|( xmc[29] << 13);
00311 sr = (sr >> 3 )|( xmc[30] << 13);
00312 *c++ = sr >> 8;
00313 sr = (sr >> 3 )|( xmc[31] << 13);
00314 sr = (sr >> 3 )|( xmc[32] << 13);
00315 sr = (sr >> 3 )|( xmc[33] << 13);
00316 *c++ = sr >> 7;
00317 sr = (sr >> 3 )|( xmc[34] << 13);
00318 sr = (sr >> 3 )|( xmc[35] << 13);
00319 sr = (sr >> 3 )|( xmc[36] << 13);
00320 *c++ = sr >> 6;
00321 sr = (sr >> 3 )|( xmc[37] << 13);
00322 sr = (sr >> 3 )|( xmc[38] << 13);
00323 *c++ = sr >> 8;
00324 sr = (sr >> 7 )|( Nc[3] << 9);
00325 sr = (sr >> 2 )|( bc[3] << 14);
00326 *c++ = sr >> 7;
00327 sr = (sr >> 2 )|( Mc[3] << 14);
00328 sr = (sr >> 6 )|( xmaxc[3] << 10);
00329 *c++ = sr >> 7;
00330 sr = (sr >> 3 )|( xmc[39] << 13);
00331 sr = (sr >> 3 )|( xmc[40] << 13);
00332 sr = (sr >> 3 )|( xmc[41] << 13);
00333 *c++ = sr >> 6;
00334 sr = (sr >> 3 )|( xmc[42] << 13);
00335 sr = (sr >> 3 )|( xmc[43] << 13);
00336 *c++ = sr >> 8;
00337 sr = (sr >> 3 )|( xmc[44] << 13);
00338 sr = (sr >> 3 )|( xmc[45] << 13);
00339 sr = (sr >> 3 )|( xmc[46] << 13);
00340 *c++ = sr >> 7;
00341 sr = (sr >> 3 )|( xmc[47] << 13);
00342 sr = (sr >> 3 )|( xmc[48] << 13);
00343 sr = (sr >> 3 )|( xmc[49] << 13);
00344 *c++ = sr >> 6;
00345 sr = (sr >> 3 )|( xmc[50] << 13);
00346 sr = (sr >> 3 )|( xmc[51] << 13);
00347 *c++ = sr >> 8;
00348
00349 }
00350
00351 #define writeGSM_33(c1) { \
00352 gsm_byte *c = (c1); \
00353 *c++ = ((GSM_MAGIC & 0xF) << 4) \
00354 | ((LARc[0] >> 2) & 0xF); \
00355 *c++ = ((LARc[0] & 0x3) << 6) \
00356 | (LARc[1] & 0x3F); \
00357 *c++ = ((LARc[2] & 0x1F) << 3) \
00358 | ((LARc[3] >> 2) & 0x7); \
00359 *c++ = ((LARc[3] & 0x3) << 6) \
00360 | ((LARc[4] & 0xF) << 2) \
00361 | ((LARc[5] >> 2) & 0x3); \
00362 *c++ = ((LARc[5] & 0x3) << 6) \
00363 | ((LARc[6] & 0x7) << 3) \
00364 | (LARc[7] & 0x7); \
00365 *c++ = ((Nc[0] & 0x7F) << 1) \
00366 | ((bc[0] >> 1) & 0x1); \
00367 *c++ = ((bc[0] & 0x1) << 7) \
00368 | ((Mc[0] & 0x3) << 5) \
00369 | ((xmaxc[0] >> 1) & 0x1F); \
00370 *c++ = ((xmaxc[0] & 0x1) << 7) \
00371 | ((xmc[0] & 0x7) << 4) \
00372 | ((xmc[1] & 0x7) << 1) \
00373 | ((xmc[2] >> 2) & 0x1); \
00374 *c++ = ((xmc[2] & 0x3) << 6) \
00375 | ((xmc[3] & 0x7) << 3) \
00376 | (xmc[4] & 0x7); \
00377 *c++ = ((xmc[5] & 0x7) << 5) \
00378 | ((xmc[6] & 0x7) << 2) \
00379 | ((xmc[7] >> 1) & 0x3); \
00380 *c++ = ((xmc[7] & 0x1) << 7) \
00381 | ((xmc[8] & 0x7) << 4) \
00382 | ((xmc[9] & 0x7) << 1) \
00383 | ((xmc[10] >> 2) & 0x1); \
00384 *c++ = ((xmc[10] & 0x3) << 6) \
00385 | ((xmc[11] & 0x7) << 3) \
00386 | (xmc[12] & 0x7); \
00387 *c++ = ((Nc[1] & 0x7F) << 1) \
00388 | ((bc[1] >> 1) & 0x1); \
00389 *c++ = ((bc[1] & 0x1) << 7) \
00390 | ((Mc[1] & 0x3) << 5) \
00391 | ((xmaxc[1] >> 1) & 0x1F); \
00392 *c++ = ((xmaxc[1] & 0x1) << 7) \
00393 | ((xmc[13] & 0x7) << 4) \
00394 | ((xmc[14] & 0x7) << 1) \
00395 | ((xmc[15] >> 2) & 0x1); \
00396 *c++ = ((xmc[15] & 0x3) << 6) \
00397 | ((xmc[16] & 0x7) << 3) \
00398 | (xmc[17] & 0x7); \
00399 *c++ = ((xmc[18] & 0x7) << 5) \
00400 | ((xmc[19] & 0x7) << 2) \
00401 | ((xmc[20] >> 1) & 0x3); \
00402 *c++ = ((xmc[20] & 0x1) << 7) \
00403 | ((xmc[21] & 0x7) << 4) \
00404 | ((xmc[22] & 0x7) << 1) \
00405 | ((xmc[23] >> 2) & 0x1); \
00406 *c++ = ((xmc[23] & 0x3) << 6) \
00407 | ((xmc[24] & 0x7) << 3) \
00408 | (xmc[25] & 0x7); \
00409 *c++ = ((Nc[2] & 0x7F) << 1) \
00410 | ((bc[2] >> 1) & 0x1); \
00411 *c++ = ((bc[2] & 0x1) << 7) \
00412 | ((Mc[2] & 0x3) << 5) \
00413 | ((xmaxc[2] >> 1) & 0x1F); \
00414 *c++ = ((xmaxc[2] & 0x1) << 7) \
00415 | ((xmc[26] & 0x7) << 4) \
00416 | ((xmc[27] & 0x7) << 1) \
00417 | ((xmc[28] >> 2) & 0x1); \
00418 *c++ = ((xmc[28] & 0x3) << 6) \
00419 | ((xmc[29] & 0x7) << 3) \
00420 | (xmc[30] & 0x7); \
00421 *c++ = ((xmc[31] & 0x7) << 5) \
00422 | ((xmc[32] & 0x7) << 2) \
00423 | ((xmc[33] >> 1) & 0x3); \
00424 *c++ = ((xmc[33] & 0x1) << 7) \
00425 | ((xmc[34] & 0x7) << 4) \
00426 | ((xmc[35] & 0x7) << 1) \
00427 | ((xmc[36] >> 2) & 0x1); \
00428 *c++ = ((xmc[36] & 0x3) << 6) \
00429 | ((xmc[37] & 0x7) << 3) \
00430 | (xmc[38] & 0x7); \
00431 *c++ = ((Nc[3] & 0x7F) << 1) \
00432 | ((bc[3] >> 1) & 0x1); \
00433 *c++ = ((bc[3] & 0x1) << 7) \
00434 | ((Mc[3] & 0x3) << 5) \
00435 | ((xmaxc[3] >> 1) & 0x1F); \
00436 *c++ = ((xmaxc[3] & 0x1) << 7) \
00437 | ((xmc[39] & 0x7) << 4) \
00438 | ((xmc[40] & 0x7) << 1) \
00439 | ((xmc[41] >> 2) & 0x1); \
00440 *c++ = ((xmc[41] & 0x3) << 6) \
00441 | ((xmc[42] & 0x7) << 3) \
00442 | (xmc[43] & 0x7); \
00443 *c++ = ((xmc[44] & 0x7) << 5) \
00444 | ((xmc[45] & 0x7) << 2) \
00445 | ((xmc[46] >> 1) & 0x3); \
00446 *c++ = ((xmc[46] & 0x1) << 7) \
00447 | ((xmc[47] & 0x7) << 4) \
00448 | ((xmc[48] & 0x7) << 1) \
00449 | ((xmc[49] >> 2) & 0x1); \
00450 *c++ = ((xmc[49] & 0x3) << 6) \
00451 | ((xmc[50] & 0x7) << 3) \
00452 | (xmc[51] & 0x7); \
00453 }
00454
00455 static inline void conv65( wav_byte * c, gsm_byte * d){
00456
00457 unsigned int sr = 0;
00458 unsigned int frame_chain;
00459 unsigned int LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4];
00460
00461 unsigned int xmc[13*4] = { 0, };
00462
00463 sr = *c++;
00464 LARc[0] = sr & 0x3f; sr >>= 6;
00465 sr |= (uword)*c++ << 2;
00466 LARc[1] = sr & 0x3f; sr >>= 6;
00467 sr |= (uword)*c++ << 4;
00468 LARc[2] = sr & 0x1f; sr >>= 5;
00469 LARc[3] = sr & 0x1f; sr >>= 5;
00470 sr |= (uword)*c++ << 2;
00471 LARc[4] = sr & 0xf; sr >>= 4;
00472 LARc[5] = sr & 0xf; sr >>= 4;
00473 sr |= (uword)*c++ << 2;
00474 LARc[6] = sr & 0x7; sr >>= 3;
00475 LARc[7] = sr & 0x7; sr >>= 3;
00476 sr |= (uword)*c++ << 4;
00477 Nc[0] = sr & 0x7f; sr >>= 7;
00478 bc[0] = sr & 0x3; sr >>= 2;
00479 Mc[0] = sr & 0x3; sr >>= 2;
00480 sr |= (uword)*c++ << 1;
00481 xmaxc[0] = sr & 0x3f; sr >>= 6;
00482 xmc[0] = sr & 0x7; sr >>= 3;
00483 sr = *c++;
00484 xmc[1] = sr & 0x7; sr >>= 3;
00485 xmc[2] = sr & 0x7; sr >>= 3;
00486 sr |= (uword)*c++ << 2;
00487 xmc[3] = sr & 0x7; sr >>= 3;
00488 xmc[4] = sr & 0x7; sr >>= 3;
00489 xmc[5] = sr & 0x7; sr >>= 3;
00490 sr |= (uword)*c++ << 1;
00491 xmc[6] = sr & 0x7; sr >>= 3;
00492 xmc[7] = sr & 0x7; sr >>= 3;
00493 xmc[8] = sr & 0x7; sr >>= 3;
00494 sr = *c++;
00495 xmc[9] = sr & 0x7; sr >>= 3;
00496 xmc[10] = sr & 0x7; sr >>= 3;
00497 sr |= (uword)*c++ << 2;
00498 xmc[11] = sr & 0x7; sr >>= 3;
00499 xmc[12] = sr & 0x7; sr >>= 3;
00500 sr |= (uword)*c++ << 4;
00501 Nc[1] = sr & 0x7f; sr >>= 7;
00502 bc[1] = sr & 0x3; sr >>= 2;
00503 Mc[1] = sr & 0x3; sr >>= 2;
00504 sr |= (uword)*c++ << 1;
00505 xmaxc[1] = sr & 0x3f; sr >>= 6;
00506 xmc[13] = sr & 0x7; sr >>= 3;
00507 sr = *c++;
00508 xmc[14] = sr & 0x7; sr >>= 3;
00509 xmc[15] = sr & 0x7; sr >>= 3;
00510 sr |= (uword)*c++ << 2;
00511 xmc[16] = sr & 0x7; sr >>= 3;
00512 xmc[17] = sr & 0x7; sr >>= 3;
00513 xmc[18] = sr & 0x7; sr >>= 3;
00514 sr |= (uword)*c++ << 1;
00515 xmc[19] = sr & 0x7; sr >>= 3;
00516 xmc[20] = sr & 0x7; sr >>= 3;
00517 xmc[21] = sr & 0x7; sr >>= 3;
00518 sr = *c++;
00519 xmc[22] = sr & 0x7; sr >>= 3;
00520 xmc[23] = sr & 0x7; sr >>= 3;
00521 sr |= (uword)*c++ << 2;
00522 xmc[24] = sr & 0x7; sr >>= 3;
00523 xmc[25] = sr & 0x7; sr >>= 3;
00524 sr |= (uword)*c++ << 4;
00525 Nc[2] = sr & 0x7f; sr >>= 7;
00526 bc[2] = sr & 0x3; sr >>= 2;
00527 Mc[2] = sr & 0x3; sr >>= 2;
00528 sr |= (uword)*c++ << 1;
00529 xmaxc[2] = sr & 0x3f; sr >>= 6;
00530 xmc[26] = sr & 0x7; sr >>= 3;
00531 sr = *c++;
00532 xmc[27] = sr & 0x7; sr >>= 3;
00533 xmc[28] = sr & 0x7; sr >>= 3;
00534 sr |= (uword)*c++ << 2;
00535 xmc[29] = sr & 0x7; sr >>= 3;
00536 xmc[30] = sr & 0x7; sr >>= 3;
00537 xmc[31] = sr & 0x7; sr >>= 3;
00538 sr |= (uword)*c++ << 1;
00539 xmc[32] = sr & 0x7; sr >>= 3;
00540 xmc[33] = sr & 0x7; sr >>= 3;
00541 xmc[34] = sr & 0x7; sr >>= 3;
00542 sr = *c++;
00543 xmc[35] = sr & 0x7; sr >>= 3;
00544 xmc[36] = sr & 0x7; sr >>= 3;
00545 sr |= (uword)*c++ << 2;
00546 xmc[37] = sr & 0x7; sr >>= 3;
00547 xmc[38] = sr & 0x7; sr >>= 3;
00548 sr |= (uword)*c++ << 4;
00549 Nc[3] = sr & 0x7f; sr >>= 7;
00550 bc[3] = sr & 0x3; sr >>= 2;
00551 Mc[3] = sr & 0x3; sr >>= 2;
00552 sr |= (uword)*c++ << 1;
00553 xmaxc[3] = sr & 0x3f; sr >>= 6;
00554 xmc[39] = sr & 0x7; sr >>= 3;
00555 sr = *c++;
00556 xmc[40] = sr & 0x7; sr >>= 3;
00557 xmc[41] = sr & 0x7; sr >>= 3;
00558 sr |= (uword)*c++ << 2;
00559 xmc[42] = sr & 0x7; sr >>= 3;
00560 xmc[43] = sr & 0x7; sr >>= 3;
00561 xmc[44] = sr & 0x7; sr >>= 3;
00562 sr |= (uword)*c++ << 1;
00563 xmc[45] = sr & 0x7; sr >>= 3;
00564 xmc[46] = sr & 0x7; sr >>= 3;
00565 xmc[47] = sr & 0x7; sr >>= 3;
00566 sr = *c++;
00567 xmc[49] = sr & 0x7; sr >>= 3;
00568 sr |= (uword)*c++ << 2;
00569 xmc[50] = sr & 0x7; sr >>= 3;
00570 xmc[51] = sr & 0x7; sr >>= 3;
00571
00572 frame_chain = sr & 0xf;
00573
00574
00575 writeGSM_33(d);
00576
00577
00578 sr = frame_chain;
00579 sr |= (uword)*c++ << 4;
00580 LARc[0] = sr & 0x3f; sr >>= 6;
00581 LARc[1] = sr & 0x3f; sr >>= 6;
00582 sr = *c++;
00583 LARc[2] = sr & 0x1f; sr >>= 5;
00584 sr |= (uword)*c++ << 3;
00585 LARc[3] = sr & 0x1f; sr >>= 5;
00586 LARc[4] = sr & 0xf; sr >>= 4;
00587 sr |= (uword)*c++ << 2;
00588 LARc[5] = sr & 0xf; sr >>= 4;
00589 LARc[6] = sr & 0x7; sr >>= 3;
00590 LARc[7] = sr & 0x7; sr >>= 3;
00591 sr = *c++;
00592 Nc[0] = sr & 0x7f; sr >>= 7;
00593 sr |= (uword)*c++ << 1;
00594 bc[0] = sr & 0x3; sr >>= 2;
00595 Mc[0] = sr & 0x3; sr >>= 2;
00596 sr |= (uword)*c++ << 5;
00597 xmaxc[0] = sr & 0x3f; sr >>= 6;
00598 xmc[0] = sr & 0x7; sr >>= 3;
00599 xmc[1] = sr & 0x7; sr >>= 3;
00600 sr |= (uword)*c++ << 1;
00601 xmc[2] = sr & 0x7; sr >>= 3;
00602 xmc[3] = sr & 0x7; sr >>= 3;
00603 xmc[4] = sr & 0x7; sr >>= 3;
00604 sr = *c++;
00605 xmc[5] = sr & 0x7; sr >>= 3;
00606 xmc[6] = sr & 0x7; sr >>= 3;
00607 sr |= (uword)*c++ << 2;
00608 xmc[7] = sr & 0x7; sr >>= 3;
00609 xmc[8] = sr & 0x7; sr >>= 3;
00610 xmc[9] = sr & 0x7; sr >>= 3;
00611 sr |= (uword)*c++ << 1;
00612 xmc[10] = sr & 0x7; sr >>= 3;
00613 xmc[11] = sr & 0x7; sr >>= 3;
00614 xmc[12] = sr & 0x7; sr >>= 3;
00615 sr = *c++;
00616 Nc[1] = sr & 0x7f; sr >>= 7;
00617 sr |= (uword)*c++ << 1;
00618 bc[1] = sr & 0x3; sr >>= 2;
00619 Mc[1] = sr & 0x3; sr >>= 2;
00620 sr |= (uword)*c++ << 5;
00621 xmaxc[1] = sr & 0x3f; sr >>= 6;
00622 xmc[13] = sr & 0x7; sr >>= 3;
00623 xmc[14] = sr & 0x7; sr >>= 3;
00624 sr |= (uword)*c++ << 1;
00625 xmc[15] = sr & 0x7; sr >>= 3;
00626 xmc[16] = sr & 0x7; sr >>= 3;
00627 xmc[17] = sr & 0x7; sr >>= 3;
00628 sr = *c++;
00629 xmc[18] = sr & 0x7; sr >>= 3;
00630 xmc[19] = sr & 0x7; sr >>= 3;
00631 sr |= (uword)*c++ << 2;
00632 xmc[20] = sr & 0x7; sr >>= 3;
00633 xmc[21] = sr & 0x7; sr >>= 3;
00634 xmc[22] = sr & 0x7; sr >>= 3;
00635 sr |= (uword)*c++ << 1;
00636 xmc[23] = sr & 0x7; sr >>= 3;
00637 xmc[24] = sr & 0x7; sr >>= 3;
00638 xmc[25] = sr & 0x7; sr >>= 3;
00639 sr = *c++;
00640 Nc[2] = sr & 0x7f; sr >>= 7;
00641 sr |= (uword)*c++ << 1;
00642 bc[2] = sr & 0x3; sr >>= 2;
00643 Mc[2] = sr & 0x3; sr >>= 2;
00644 sr |= (uword)*c++ << 5;
00645 xmaxc[2] = sr & 0x3f; sr >>= 6;
00646 xmc[26] = sr & 0x7; sr >>= 3;
00647 xmc[27] = sr & 0x7; sr >>= 3;
00648 sr |= (uword)*c++ << 1;
00649 xmc[28] = sr & 0x7; sr >>= 3;
00650 xmc[29] = sr & 0x7; sr >>= 3;
00651 xmc[30] = sr & 0x7; sr >>= 3;
00652 sr = *c++;
00653 xmc[31] = sr & 0x7; sr >>= 3;
00654 xmc[32] = sr & 0x7; sr >>= 3;
00655 sr |= (uword)*c++ << 2;
00656 xmc[33] = sr & 0x7; sr >>= 3;
00657 xmc[34] = sr & 0x7; sr >>= 3;
00658 xmc[35] = sr & 0x7; sr >>= 3;
00659 sr |= (uword)*c++ << 1;
00660 xmc[36] = sr & 0x7; sr >>= 3;
00661 xmc[37] = sr & 0x7; sr >>= 3;
00662 xmc[38] = sr & 0x7; sr >>= 3;
00663 sr = *c++;
00664 Nc[3] = sr & 0x7f; sr >>= 7;
00665 sr |= (uword)*c++ << 1;
00666 bc[3] = sr & 0x3; sr >>= 2;
00667 Mc[3] = sr & 0x3; sr >>= 2;
00668 sr |= (uword)*c++ << 5;
00669 xmaxc[3] = sr & 0x3f; sr >>= 6;
00670 xmc[39] = sr & 0x7; sr >>= 3;
00671 xmc[40] = sr & 0x7; sr >>= 3;
00672 sr |= (uword)*c++ << 1;
00673 xmc[41] = sr & 0x7; sr >>= 3;
00674 xmc[42] = sr & 0x7; sr >>= 3;
00675 xmc[43] = sr & 0x7; sr >>= 3;
00676 sr = *c++;
00677 xmc[44] = sr & 0x7; sr >>= 3;
00678 xmc[45] = sr & 0x7; sr >>= 3;
00679 sr |= (uword)*c++ << 2;
00680 xmc[46] = sr & 0x7; sr >>= 3;
00681 xmc[47] = sr & 0x7; sr >>= 3;
00682 xmc[48] = sr & 0x7; sr >>= 3;
00683 sr |= (uword)*c++ << 1;
00684 xmc[49] = sr & 0x7; sr >>= 3;
00685 xmc[50] = sr & 0x7; sr >>= 3;
00686 xmc[51] = sr & 0x7; sr >>= 3;
00687 writeGSM_33(d+33);
00688
00689 }