summaryrefslogtreecommitdiff
path: root/docs (follow)
Commit message (Expand)AuthorAge
* Patch #1421483 - AIFF codec by Jvo StuderDave Chapman2006-02-01
* Add Tim Crist (ts-x) - Brickmania levels designerDave Chapman2006-01-23
* Better random number generator: Mersenne twiser with improved initialisation....Jens Arnold2006-01-20
* Profiling support, tools and documentation.Brandon Low2006-01-18
* Matt v.d. Westhuizen's iAudio X5 keypad adjustmentsDaniel Stenberg2006-01-18
* Use SDL's thread wrappers instead of pthreads to increase portability in the ...Dave Chapman2006-01-13
* Work-in-progress iriver iFP-7xx port by Tomasz MalesinskiDave Chapman2006-01-12
* Patch #1401999 by Karl Kurbjun - Rockboy color, sound support, and speedupsLinus Nielsen Feltzing2006-01-10
* Metronome plugin for iriver targets, by Sebastian Henriksen, Martin Scarratt ...Linus Nielsen Feltzing2006-01-10
* SDL simulator brought by Nathan Hand and Nick Lanham. This is added as a thirdDaniel Stenberg2006-01-09
* Patch #1392287 by Brandon Low - faster LCD update for H300 with ASMLinus Nielsen Feltzing2005-12-28
* H300: Colors for solitaire by Ben BashaLinus Nielsen Feltzing2005-12-20
* H300 FM radio support, with help from Peter D'HoyeLinus Nielsen Feltzing2005-12-15
* Patch #1377879 by Anders Kagerin - faster lcd_update_rect() for h300Linus Nielsen Feltzing2005-12-11
* add a korean translation to rockbox by David J. Song and Jeong Taek InMarcoen Hirschberg2005-12-07
* credit Frank Dischner and Tat Tang for their work on unicode and Toshihiko It...Marcoen Hirschberg2005-12-06
* waiting is over: initial unicode commitMarcoen Hirschberg2005-12-06
* H300 support for Sudoku by Jonathan GordonDave Chapman2005-11-27
* Update for H300 plus minor fixesAdam Boot2005-11-27
* add Mustapha Senhaji (Moos) to the creditsMarcoen Hirschberg2005-11-21
* zezayer WPS by Jake OwenChristi Scarborough2005-11-17
* Remote WPS support (and some WPS bugfixes) by Stephan WezelChristi Scarborough2005-11-17
* Patch #1352575 - Shorten codec from the ffmpeg project. Rockbox implementati...Dave Chapman2005-11-11
* Added Anton to the creditsLinus Nielsen Feltzing2005-11-02
* Spell out that we use ISO 8859-1 at places, but we should rather remainDaniel Stenberg2005-10-28
* New plugin: Plasma effect, developed by Mat Holton, imtegerised and extended ...Jens Arnold2005-10-07
* Workaround for ALAC files that previousy wouldn't play. Libalac now skips unk...Jonas Häggqvist2005-09-24
* Patch #1285659 by Stephan Wezel, adds the %bp tag to the WPS (external power ...Linus Nielsen Feltzing2005-09-09
* Added missing credit.Jens Arnold2005-09-04
* Frank convbdf patcherDaniel Stenberg2005-08-23
* The previous commit I did was supposed to fix the wps mode patch onlyMiika Pekkarinen2005-08-21
* Committed the "[ 1247788 ] Adds wps tags for repeat modes" patch.Miika Pekkarinen2005-08-21
* Patch #783877 by Gadi Cohen updated by Naftali Goldstein - Bidirectional text...Linus Nielsen Feltzing2005-08-08
* Forgot to add to CREDITS for the Galego translationJonas Häggqvist2005-07-21
* Patch #1232741 by Frederic Devernay - chip8 plugin now playable, and with SCH...Linus Nielsen Feltzing2005-07-06
* (1) Patch 1231281: Alignment tags for the WPS by Per Holmaeng. Use %al for l...Christi Scarborough2005-07-05
* Patch #1232549 by Ryan Jackson, adds seeking and comments to Vorbis playbackLinus Nielsen Feltzing2005-07-05
* New fonts + slight fix to rockbox_default by Antonius Hellman (patch #1228206)Christi Scarborough2005-06-30
* Updated Nederlands (Dutch) translation by Sander SweersJonas Häggqvist2005-06-30
* Hristo Kovachev's keypad fixes for the H300 buildDaniel Stenberg2005-06-29
* Add make install step - still quite outdated, but at least what's there is mo...Jonas Häggqvist2005-06-26
* Patch 1163135 by Bryan Vandyke: Remove trailing spaces for ID3v2 tagsJonas Häggqvist2005-06-26
* Patch #1218188 by Konstantin Isakov: Don't wrap around scroll in file-browser...Jonas Häggqvist2005-06-26
* New feature for units that can be powered or charged from USB (Recorder fm/v2...Jens Arnold2005-06-23
* Patch #1223219 by Dave Wiard - Add all supported audio files with Create Play...Linus Nielsen Feltzing2005-06-20
* ID3 parser bug fix by Ray LambertLinus Nielsen Feltzing2005-06-15
* - add Andy Young's patch to make sound init more quietMarcoen Hirschberg2005-06-14
* A little improvement on Vorbis block synthesis.Pedro Vasconcelos2005-06-10
* Snake2 port to iRiver by Alexander SpyridakisLinus Nielsen Feltzing2005-06-09
* Miikka was already added right after my name for writing a conversion script ...Tomas Salfischberger2005-06-07
nal, &s_signal); x->x_f = 0; return (x); } static void *sigifft_new(void) { t_sigfft *x = (t_sigfft *)pd_new(sigifft_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); x->x_f = 0; return (x); } static t_int *sigfft_swap(t_int *w) { t_sample *in1 = (t_sample *)(w[1]); t_sample *in2 = (t_sample *)(w[2]); int n = w[3]; for (;n--; in1++, in2++) { float f = *in1; *in1 = *in2; *in2 = f; } return (w+4); } static t_int *sigfft_perform(t_int *w) { t_sample *in1 = (t_sample *)(w[1]); t_sample *in2 = (t_sample *)(w[2]); int n = w[3]; mayer_fft(n, in1, in2); return (w+4); } static t_int *sigifft_perform(t_int *w) { t_sample *in1 = (t_sample *)(w[1]); t_sample *in2 = (t_sample *)(w[2]); int n = w[3]; mayer_ifft(n, in1, in2); return (w+4); } static void sigfft_dspx(t_sigfft *x, t_signal **sp, t_int *(*f)(t_int *w)) { #ifdef ROCKBOX (void) x; #endif int n = sp[0]->s_n; t_sample *in1 = sp[0]->s_vec; t_sample *in2 = sp[1]->s_vec; t_sample *out1 = sp[2]->s_vec; t_sample *out2 = sp[3]->s_vec; if (out1 == in2 && out2 == in1) dsp_add(sigfft_swap, 3, out1, out2, n); else if (out1 == in2) { dsp_add(copy_perform, 3, in2, out2, n); dsp_add(copy_perform, 3, in1, out1, n); } else { if (out1 != in1) dsp_add(copy_perform, 3, in1, out1, n); if (out2 != in2) dsp_add(copy_perform, 3, in2, out2, n); } dsp_add(f, 3, sp[2]->s_vec, sp[3]->s_vec, n); } static void sigfft_dsp(t_sigfft *x, t_signal **sp) { sigfft_dspx(x, sp, sigfft_perform); } static void sigifft_dsp(t_sigfft *x, t_signal **sp) { sigfft_dspx(x, sp, sigifft_perform); } static void sigfft_setup(void) { sigfft_class = class_new(gensym("fft~"), sigfft_new, 0, sizeof(t_sigfft), 0, 0); CLASS_MAINSIGNALIN(sigfft_class, t_sigfft, x_f); class_addmethod(sigfft_class, (t_method)sigfft_dsp, gensym("dsp"), 0); sigifft_class = class_new(gensym("ifft~"), sigifft_new, 0, sizeof(t_sigfft), 0, 0); CLASS_MAINSIGNALIN(sigifft_class, t_sigfft, x_f); class_addmethod(sigifft_class, (t_method)sigifft_dsp, gensym("dsp"), 0); class_sethelpsymbol(sigifft_class, gensym("fft~")); } /* ----------------------- rfft~ -------------------------------- */ static t_class *sigrfft_class; typedef struct rfft { t_object x_obj; float x_f; } t_sigrfft; static void *sigrfft_new(void) { t_sigrfft *x = (t_sigrfft *)pd_new(sigrfft_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->x_f = 0; return (x); } static t_int *sigrfft_flip(t_int *w) { t_sample *in = (t_sample *)(w[1]); t_sample *out = (t_sample *)(w[2]); int n = w[3]; while (n--) *(--out) = *in++; *(--out) = 0; /* to hell with it */ return (w+4); } static t_int *sigrfft_perform(t_int *w) { t_sample *in = (t_sample *)(w[1]); int n = w[2]; mayer_realfft(n, in); return (w+3); } static void sigrfft_dsp(t_sigrfft *x, t_signal **sp) { #ifdef ROCKBOX (void) x; #endif int n = sp[0]->s_n, n2 = (n>>1); t_sample *in1 = sp[0]->s_vec; t_sample *out1 = sp[1]->s_vec; t_sample *out2 = sp[2]->s_vec; if (n < 4) { error("fft: minimum 4 points"); return; } if (in1 == out2) /* this probably never happens */ { dsp_add(sigrfft_perform, 2, out2, n); dsp_add(copy_perform, 3, out2, out1, n2); dsp_add(sigrfft_flip, 3, out2 + (n2+1), out2 + n2, n2-1); } else { if (in1 != out1) dsp_add(copy_perform, 3, in1, out1, n); dsp_add(sigrfft_perform, 2, out1, n); dsp_add(sigrfft_flip, 3, out1 + (n2+1), out2 + n2, n2-1); } dsp_add_zero(out1 + n2, n2); dsp_add_zero(out2 + n2, n2); } static void sigrfft_setup(void) { sigrfft_class = class_new(gensym("rfft~"), sigrfft_new, 0, sizeof(t_sigrfft), 0, 0); CLASS_MAINSIGNALIN(sigrfft_class, t_sigrfft, x_f); class_addmethod(sigrfft_class, (t_method)sigrfft_dsp, gensym("dsp"), 0); class_sethelpsymbol(sigrfft_class, gensym("fft~")); } /* ----------------------- rifft~ -------------------------------- */ static t_class *sigrifft_class; typedef struct rifft { t_object x_obj; float x_f; } t_sigrifft; static void *sigrifft_new(void) { t_sigrifft *x = (t_sigrifft *)pd_new(sigrifft_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); outlet_new(&x->x_obj, gensym("signal")); x->x_f = 0; return (x); } static t_int *sigrifft_perform(t_int *w) { t_sample *in = (t_sample *)(w[1]); int n = w[2]; mayer_realifft(n, in); return (w+3); } static void sigrifft_dsp(t_sigrifft *x, t_signal **sp) { #ifdef ROCKBOX (void) x; #endif int n = sp[0]->s_n, n2 = (n>>1); t_sample *in1 = sp[0]->s_vec; t_sample *in2 = sp[1]->s_vec; t_sample *out1 = sp[2]->s_vec; if (n < 4) { error("fft: minimum 4 points"); return; } if (in2 == out1) { dsp_add(sigrfft_flip, 3, out1+1, out1 + n, (n2-1)); dsp_add(copy_perform, 3, in1, out1, n2); } else { if (in1 != out1) dsp_add(copy_perform, 3, in1, out1, n2); dsp_add(sigrfft_flip, 3, in2+1, out1 + n, n2-1); } dsp_add(sigrifft_perform, 2, out1, n); } static void sigrifft_setup(void) { sigrifft_class = class_new(gensym("rifft~"), sigrifft_new, 0, sizeof(t_sigrifft), 0, 0); CLASS_MAINSIGNALIN(sigrifft_class, t_sigrifft, x_f); class_addmethod(sigrifft_class, (t_method)sigrifft_dsp, gensym("dsp"), 0); class_sethelpsymbol(sigrifft_class, gensym("fft~")); } /* ----------------------- framp~ -------------------------------- */ #if 0 static t_class *sigframp_class; typedef struct framp { t_object x_obj; float x_f; } t_sigframp; static void *sigframp_new(void) { t_sigframp *x = (t_sigframp *)pd_new(sigframp_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->x_f = 0; return (x); } static t_int *sigframp_perform(t_int *w) { float *inreal = (t_float *)(w[1]); float *inimag = (t_float *)(w[2]); float *outfreq = (t_float *)(w[3]); float *outamp = (t_float *)(w[4]); float lastreal = 0, currentreal = inreal[0], nextreal = inreal[1]; float lastimag = 0, currentimag = inimag[0], nextimag = inimag[1]; int n = w[5]; int m = n + 1; float fbin = 1, oneovern2 = 1.f/((float)n * (float)n); inreal += 2; inimag += 2; *outamp++ = *outfreq++ = 0; n -= 2; while (n--) { float re, im, pow, freq; lastreal = currentreal; currentreal = nextreal; nextreal = *inreal++; lastimag = currentimag; currentimag = nextimag; nextimag = *inimag++; re = currentreal - 0.5f * (lastreal + nextreal); im = currentimag - 0.5f * (lastimag + nextimag); pow = re * re + im * im; if (pow > 1e-19) { float detune = ((lastreal - nextreal) * re + (lastimag - nextimag) * im) / (2.0f * pow); if (detune > 2 || detune < -2) freq = pow = 0; else freq = fbin + detune; } else freq = pow = 0; *outfreq++ = freq; *outamp++ = oneovern2 * pow; fbin += 1.0f; } while (m--) *outamp++ = *outfreq++ = 0; return (w+6); } t_int *sigsqrt_perform(t_int *w); static void sigframp_dsp(t_sigframp *x, t_signal **sp) { int n = sp[0]->s_n, n2 = (n>>1); if (n < 4) { error("framp: minimum 4 points"); return; } dsp_add(sigframp_perform, 5, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, n2); dsp_add(sigsqrt_perform, 3, sp[3]->s_vec, sp[3]->s_vec, n2); } static void sigframp_setup(void) { sigframp_class = class_new(gensym("framp~"), sigframp_new, 0, sizeof(t_sigframp), 0, 0); CLASS_MAINSIGNALIN(sigframp_class, t_sigframp, x_f); class_addmethod(sigframp_class, (t_method)sigframp_dsp, gensym("dsp"), 0); } #endif /* ------------------------ global setup routine ------------------------- */ void d_fft_setup(void) { sigfft_setup(); sigrfft_setup(); sigrifft_setup(); // sigframp_setup(); }