198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/* Copyright (C) 2006 Jean-Marc Valin */ 298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/** 398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project @file filterbank.h 498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project @brief Converting between psd and filterbank 598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project */ 698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project/* 798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project Redistribution and use in source and binary forms, with or without 898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project modification, are permitted provided that the following conditions are 998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project met: 1098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 1198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 1. Redistributions of source code must retain the above copyright notice, 1298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project this list of conditions and the following disclaimer. 1398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 1498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 2. Redistributions in binary form must reproduce the above copyright 1598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project notice, this list of conditions and the following disclaimer in the 1698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project documentation and/or other materials provided with the distribution. 1798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 1898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 3. The name of the author may not be used to endorse or promote products 1998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project derived from this software without specific prior written permission. 2098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 2198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 2498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 2598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 2998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 3098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project POSSIBILITY OF SUCH DAMAGE. 3298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project*/ 3398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 3498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifndef FILTERBANK_H 3598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#define FILTERBANK_H 3698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 3798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#include "arch.h" 3898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 3998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projecttypedef struct { 4098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project int *bank_left; 4198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project int *bank_right; 4298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project spx_word16_t *filter_left; 4398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project spx_word16_t *filter_right; 4498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifndef FIXED_POINT 4598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project float *scaling; 4698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif 4798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project int nb_banks; 4898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project int len; 4998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project} FilterBank; 5098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 5198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 5298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source ProjectFilterBank *filterbank_new(int banks, spx_word32_t sampling, int len, int type); 5398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 5498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_destroy(FilterBank *bank); 5598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 5698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_bank32(FilterBank *bank, spx_word32_t *ps, spx_word32_t *mel); 5798913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 5898913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_psd16(FilterBank *bank, spx_word16_t *mel, spx_word16_t *psd); 5998913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 6098913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#ifndef FIXED_POINT 6198913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_bank(FilterBank *bank, float *psd, float *mel); 6298913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Projectvoid filterbank_compute_psd(FilterBank *bank, float *mel, float *psd); 6398913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif 6498913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 6598913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project 6698913fed6520d8849fb2e246be943e04474aefaThe Android Open Source Project#endif 67