/* 3GPP Reference HR vocoder file formats * * See http://ftp.3gpp.org/Specs/2001-06/Ph2/06_series/0606-421/0606_421.zip */ /* * This file is part of gapk (GSM Audio Pocket Knife). * * gapk 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 3 of the License, or * (at your option) any later version. * * gapk 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 gapk. If not, see . */ #include #include #include #include static const int params_unvoiced[] = { 5, /* R0 */ 11, /* k1Tok3 */ 9, /* k4Tok6 */ 8, /* k7Tok10 */ 1, /* softInterpolation */ 2, /* voicingDecision */ 7, /* code1_1 */ 7, /* code2_1 */ 5, /* gsp0_1 */ 7, /* code1_2 */ 7, /* code2_2 */ 5, /* gsp0_2 */ 7, /* code1_3 */ 7, /* code2_3 */ 5, /* gsp0_3 */ 7, /* code1_4 */ 7, /* code2_4 */ 5, /* gsp0_4 */ }; static const int params_voiced[] = { 5, /* R0 */ 11, /* k1Tok3 */ 9, /* k4Tok6 */ 8, /* k7Tok10 */ 1, /* softInterpolation */ 2, /* voicingDecision */ 8, /* frameLag */ 9, /* code_1 */ 5, /* gsp0_1 */ 4, /* deltaLag_2 */ 9, /* code_2 */ 5, /* gsp0_2 */ 4, /* deltaLag_3 */ 9, /* code_3 */ 5, /* gsp0_3 */ 4, /* deltaLag_4 */ 9, /* code_4 */ 5, /* gsp0_4 */ }; static int hr_ref_from_canon(uint16_t *hr_ref, const uint8_t *canon) { int i, j, voiced; const int *params; voiced = (msb_get_bit(canon, 34) << 1) | msb_get_bit(canon, 35); params = voiced ? ¶ms_voiced[0] : ¶ms_unvoiced[0]; for (i=0,j=0; i<18; i++) { uint16_t w; int l, k; l = params[i]; w = 0; for (k=0; k