00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _V_ENVELOPE_
00019 #define _V_ENVELOPE_
00020
00021 #include "mdct.h"
00022
00023 #define VE_PRE 16
00024 #define VE_WIN 4
00025 #define VE_POST 2
00026 #define VE_AMP (VE_PRE+VE_POST-1)
00027
00028 #define VE_BANDS 7
00029 #define VE_NEARDC 15
00030
00031 #define VE_MINSTRETCH 2
00032 #define VE_MAXSTRETCH 12
00033
00034 typedef struct {
00035 float ampbuf[VE_AMP];
00036 int ampptr;
00037
00038 float nearDC[VE_NEARDC];
00039 float nearDC_acc;
00040 float nearDC_partialacc;
00041 int nearptr;
00042
00043 } envelope_filter_state;
00044
00045 typedef struct {
00046 int begin;
00047 int end;
00048 float *window;
00049 float total;
00050 } envelope_band;
00051
00052 typedef struct {
00053 int ch;
00054 int winlength;
00055 int searchstep;
00056 float minenergy;
00057
00058 mdct_lookup mdct;
00059 float *mdct_win;
00060
00061 envelope_band band[VE_BANDS];
00062 envelope_filter_state *filter;
00063 int stretch;
00064
00065 int *mark;
00066
00067 long storage;
00068 long current;
00069 long curmark;
00070 long cursor;
00071 } envelope_lookup;
00072
00073 extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi);
00074 extern void _ve_envelope_clear(envelope_lookup *e);
00075 extern long _ve_envelope_search(vorbis_dsp_state *v);
00076 extern void _ve_envelope_shift(envelope_lookup *e,long shift);
00077 extern int _ve_envelope_mark(vorbis_dsp_state *v);
00078
00079
00080 #endif
00081