001/* JOrbis 002 * Copyright (C) 2000 ymnk, JCraft,Inc. 003 * 004 * Written by: 2000 ymnk<ymnk@jcaft.com> 005 * 006 * Many thanks to 007 * Monty <monty@xiph.org> and 008 * The XIPHOPHORUS Company http://www.xiph.org/ . 009 * JOrbis has been based on their awesome works, Vorbis codec. 010 * 011 * This program is free software; you can redistribute it and/or 012 * modify it under the terms of the GNU Library General Public License 013 * as published by the Free Software Foundation; either version 2 of 014 * the License, or (at your option) any later version. 015 016 * This program is distributed in the hope that it will be useful, 017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 019 * GNU Library General Public License for more details. 020 * 021 * You should have received a copy of the GNU Library General Public 022 * License along with this program; if not, write to the Free Software 023 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 024 */ 025 026package com.jcraft.jorbis; 027 028class PsyLook { 029 int n; 030 PsyInfo vi; 031 032 float[][][] tonecurves; 033 float[][] peakatt; 034 float[][][] noisecurves; 035 036 float[] ath; 037 int[] octave; 038 039 void init(PsyInfo vi, int n, int rate){ 040 /* 041 float rate2=rate/2.; 042 //memset(p,0,sizeof(vorbis_look_psy)); 043 ath=new float[n]; 044 octave=new int[n]; 045 this.vi=vi; 046 this.n=n; 047 048 // set up the lookups for a given blocksize and sample rate 049 // Vorbis max sample rate is limited by 26 Bark (54kHz) 050 set_curve(ATH_Bark_dB, ath,n,rate); 051 for(int i=0;i<n;i++) 052 ath[i]=fromdB(ath[i]+vi.ath_att); 053 054 for(int i=0;i<n;i++){ 055 int oc=rint(toOC((i+.5)*rate2/n)*2.); 056 if(oc<0)oc=0; 057 if(oc>12)oc=12; 058 octave[i]=oc; 059 } 060 061 tonecurves=malloc(13*sizeof(float **)); 062 noisecurves=malloc(13*sizeof(float **)); 063 peakatt=malloc(7*sizeof(float *)); 064 for(int i=0;i<13;i++){ 065 tonecurves[i]=malloc(9*sizeof(float *)); 066 noisecurves[i]=malloc(9*sizeof(float *)); 067 } 068 for(i=0;i<7;i++) 069 peakatt[i]=malloc(5*sizeof(float)); 070 071 for(i=0;i<13;i++){ 072 for(j=0;j<9;j++){ 073 tonecurves[i][j]=malloc(EHMER_MAX*sizeof(float)); 074 noisecurves[i][j]=malloc(EHMER_MAX*sizeof(float)); 075 } 076 } 077 078 // OK, yeah, this was a silly way to do it 079 memcpy(tonecurves[0][2],tone_125_80dB_SL,sizeof(float)*EHMER_MAX); 080 memcpy(tonecurves[0][4],tone_125_80dB_SL,sizeof(float)*EHMER_MAX); 081 memcpy(tonecurves[0][6],tone_125_80dB_SL,sizeof(float)*EHMER_MAX); 082 memcpy(tonecurves[0][8],tone_125_100dB_SL,sizeof(float)*EHMER_MAX); 083 084 memcpy(tonecurves[2][2],tone_250_40dB_SL,sizeof(float)*EHMER_MAX); 085 memcpy(tonecurves[2][4],tone_250_60dB_SL,sizeof(float)*EHMER_MAX); 086 memcpy(tonecurves[2][6],tone_250_80dB_SL,sizeof(float)*EHMER_MAX); 087 memcpy(tonecurves[2][8],tone_250_80dB_SL,sizeof(float)*EHMER_MAX); 088 089 memcpy(tonecurves[4][2],tone_500_40dB_SL,sizeof(float)*EHMER_MAX); 090 memcpy(tonecurves[4][4],tone_500_60dB_SL,sizeof(float)*EHMER_MAX); 091 memcpy(tonecurves[4][6],tone_500_80dB_SL,sizeof(float)*EHMER_MAX); 092 memcpy(tonecurves[4][8],tone_500_100dB_SL,sizeof(float)*EHMER_MAX); 093 094 memcpy(tonecurves[6][2],tone_1000_40dB_SL,sizeof(float)*EHMER_MAX); 095 memcpy(tonecurves[6][4],tone_1000_60dB_SL,sizeof(float)*EHMER_MAX); 096 memcpy(tonecurves[6][6],tone_1000_80dB_SL,sizeof(float)*EHMER_MAX); 097 memcpy(tonecurves[6][8],tone_1000_100dB_SL,sizeof(float)*EHMER_MAX); 098 099 memcpy(tonecurves[8][2],tone_2000_40dB_SL,sizeof(float)*EHMER_MAX); 100 memcpy(tonecurves[8][4],tone_2000_60dB_SL,sizeof(float)*EHMER_MAX); 101 memcpy(tonecurves[8][6],tone_2000_80dB_SL,sizeof(float)*EHMER_MAX); 102 memcpy(tonecurves[8][8],tone_2000_100dB_SL,sizeof(float)*EHMER_MAX); 103 104 memcpy(tonecurves[10][2],tone_4000_40dB_SL,sizeof(float)*EHMER_MAX); 105 memcpy(tonecurves[10][4],tone_4000_60dB_SL,sizeof(float)*EHMER_MAX); 106 memcpy(tonecurves[10][6],tone_4000_80dB_SL,sizeof(float)*EHMER_MAX); 107 memcpy(tonecurves[10][8],tone_4000_100dB_SL,sizeof(float)*EHMER_MAX); 108 109 memcpy(tonecurves[12][2],tone_4000_40dB_SL,sizeof(float)*EHMER_MAX); 110 memcpy(tonecurves[12][4],tone_4000_60dB_SL,sizeof(float)*EHMER_MAX); 111 memcpy(tonecurves[12][6],tone_8000_80dB_SL,sizeof(float)*EHMER_MAX); 112 memcpy(tonecurves[12][8],tone_8000_100dB_SL,sizeof(float)*EHMER_MAX); 113 114 115 memcpy(noisecurves[0][2],noise_500_60dB_SL,sizeof(float)*EHMER_MAX); 116 memcpy(noisecurves[0][4],noise_500_60dB_SL,sizeof(float)*EHMER_MAX); 117 memcpy(noisecurves[0][6],noise_500_80dB_SL,sizeof(float)*EHMER_MAX); 118 memcpy(noisecurves[0][8],noise_500_80dB_SL,sizeof(float)*EHMER_MAX); 119 120 memcpy(noisecurves[2][2],noise_500_60dB_SL,sizeof(float)*EHMER_MAX); 121 memcpy(noisecurves[2][4],noise_500_60dB_SL,sizeof(float)*EHMER_MAX); 122 memcpy(noisecurves[2][6],noise_500_80dB_SL,sizeof(float)*EHMER_MAX); 123 memcpy(noisecurves[2][8],noise_500_80dB_SL,sizeof(float)*EHMER_MAX); 124 125 memcpy(noisecurves[4][2],noise_500_60dB_SL,sizeof(float)*EHMER_MAX); 126 memcpy(noisecurves[4][4],noise_500_60dB_SL,sizeof(float)*EHMER_MAX); 127 memcpy(noisecurves[4][6],noise_500_80dB_SL,sizeof(float)*EHMER_MAX); 128 memcpy(noisecurves[4][8],noise_500_80dB_SL,sizeof(float)*EHMER_MAX); 129 130 memcpy(noisecurves[6][2],noise_1000_60dB_SL,sizeof(float)*EHMER_MAX); 131 memcpy(noisecurves[6][4],noise_1000_60dB_SL,sizeof(float)*EHMER_MAX); 132 memcpy(noisecurves[6][6],noise_1000_80dB_SL,sizeof(float)*EHMER_MAX); 133 memcpy(noisecurves[6][8],noise_1000_80dB_SL,sizeof(float)*EHMER_MAX); 134 135 memcpy(noisecurves[8][2],noise_2000_60dB_SL,sizeof(float)*EHMER_MAX); 136 memcpy(noisecurves[8][4],noise_2000_60dB_SL,sizeof(float)*EHMER_MAX); 137 memcpy(noisecurves[8][6],noise_2000_80dB_SL,sizeof(float)*EHMER_MAX); 138 memcpy(noisecurves[8][8],noise_2000_80dB_SL,sizeof(float)*EHMER_MAX); 139 140 memcpy(noisecurves[10][2],noise_4000_60dB_SL,sizeof(float)*EHMER_MAX); 141 memcpy(noisecurves[10][4],noise_4000_60dB_SL,sizeof(float)*EHMER_MAX); 142 memcpy(noisecurves[10][6],noise_4000_80dB_SL,sizeof(float)*EHMER_MAX); 143 memcpy(noisecurves[10][8],noise_4000_80dB_SL,sizeof(float)*EHMER_MAX); 144 145 memcpy(noisecurves[12][2],noise_4000_60dB_SL,sizeof(float)*EHMER_MAX); 146 memcpy(noisecurves[12][4],noise_4000_60dB_SL,sizeof(float)*EHMER_MAX); 147 memcpy(noisecurves[12][6],noise_4000_80dB_SL,sizeof(float)*EHMER_MAX); 148 memcpy(noisecurves[12][8],noise_4000_80dB_SL,sizeof(float)*EHMER_MAX); 149 150 setup_curve(tonecurves[0],0,vi.toneatt_125Hz); 151 setup_curve(tonecurves[2],2,vi.toneatt_250Hz); 152 setup_curve(tonecurves[4],4,vi.toneatt_500Hz); 153 setup_curve(tonecurves[6],6,vi.toneatt_1000Hz); 154 setup_curve(tonecurves[8],8,vi.toneatt_2000Hz); 155 setup_curve(tonecurves[10],10,vi.toneatt_4000Hz); 156 setup_curve(tonecurves[12],12,vi.toneatt_8000Hz); 157 158 setup_curve(noisecurves[0],0,vi.noiseatt_125Hz); 159 setup_curve(noisecurves[2],2,vi.noiseatt_250Hz); 160 setup_curve(noisecurves[4],4,vi.noiseatt_500Hz); 161 setup_curve(noisecurves[6],6,vi.noiseatt_1000Hz); 162 setup_curve(noisecurves[8],8,vi.noiseatt_2000Hz); 163 setup_curve(noisecurves[10],10,vi.noiseatt_4000Hz); 164 setup_curve(noisecurves[12],12,vi.noiseatt_8000Hz); 165 166 for(i=1;i<13;i+=2){ 167 for(j=0;j<9;j++){ 168 interp_curve_dB(tonecurves[i][j], 169 tonecurves[i-1][j], 170 tonecurves[i+1][j],.5); 171 interp_curve_dB(noisecurves[i][j], 172 noisecurves[i-1][j], 173 noisecurves[i+1][j],.5); 174 } 175 } 176 for(i=0;i<5;i++){ 177 peakatt[0][i]=fromdB(vi.peakatt_125Hz[i]); 178 peakatt[1][i]=fromdB(vi.peakatt_250Hz[i]); 179 peakatt[2][i]=fromdB(vi.peakatt_500Hz[i]); 180 peakatt[3][i]=fromdB(vi.peakatt_1000Hz[i]); 181 peakatt[4][i]=fromdB(vi.peakatt_2000Hz[i]); 182 peakatt[5][i]=fromdB(vi.peakatt_4000Hz[i]); 183 peakatt[6][i]=fromdB(vi.peakatt_8000Hz[i]); 184 } 185 */ 186 } 187}