1 /****************************************************************************
3 * ____ ___ ____ __ ______ ___ ____ ____/ / *
4 * / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __ / *
5 * / / / / / / /_/ /> </ / / / / / /_/ / /_/ / *
6 * /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/ *
8 * Copyright (c) 2008, Mukunda Johnson (mukunda@maxmod.org) *
10 * Permission to use, copy, modify, and/or distribute this software for any *
11 * purpose with or without fee is hereby granted, provided that the above *
12 * copyright notice and this permission notice appear in all copies. *
14 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
15 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF *
16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR *
17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN *
19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
20 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
21 ****************************************************************************/
32 #include "samplefix.h"
34 // cREDITS TO CODA, LOOK AT THIS AWESOME CODES
35 u32 readbits(u8* buffer, unsigned int pos, unsigned int size) {
42 byte_pos = (pos+i)>>3;
44 result |= ( (buffer[byte_pos] >> bit_pos) & 1 ) << i;
49 int get_ext( char* filename )
51 int strl = strlen(filename);
55 return INPUT_TYPE_UNK;
56 for( x = 0; x < 4; x++ )
58 if( filename[strl-x-1] != '.' )
60 a |= tolower(filename[strl-x-1]) << (x*8);
65 //a = tolower( filename[strl-1] ) | (tolower( filename[strl-1] )<<8) | tolower( filename[strl-2]<<16 ) | tolower( filename[strl-3]<<24 );
70 return INPUT_TYPE_MOD;
72 return INPUT_TYPE_S3M;
74 return INPUT_TYPE_TXT;
76 return INPUT_TYPE_WAV;
78 return INPUT_TYPE_MSL;
86 return INPUT_TYPE_UNK;
89 u32 calc_samplen_ex2( Sample* s )
91 if( s->loop_type == 0 )
93 return s->sample_length;
101 u32 calc_samplooplen( Sample* s )
104 if( s->loop_type == 1 )
106 a = s->loop_end - s->loop_start;
109 else if( s->loop_type == 2 )
111 a = (s->loop_end-s->loop_start) *2;
120 u32 calc_samplen( Sample* s )
122 if( s->loop_type == 1 )
126 else if( s->loop_type == 2 )
128 return (s->loop_end-s->loop_start)+s->loop_end;
132 return s->sample_length;
136 u8 sample_dsformat( Sample* samp )
138 if( samp->format & SAMPF_COMP )
144 if( samp->format & SAMPF_SIGNED )
146 if( samp->format & SAMPF_16BIT )
153 if( !(samp->format & SAMPF_16BIT) )
161 u8 sample_dsreptype( Sample* samp )
163 if( samp->loop_type )
169 int clamp_s8( int value )
171 if( value < -128 ) value = -128;
172 if( value > 127 ) value = 127;
176 int clamp_u8( int value )
178 if( value < 0 ) value = 0;
179 if( value > 255 ) value = 255;