Thursday, February 12, 2009

Damnu sin, GSL!

Unu parto de ĉi tiu programon estas kalkuilo de ĉiu pianoklava laŭtalo. Ĝi utiligas 96 klavatonojn, kiu inkluzivas ĉiun pianen ludeblan tonon. Ĝi faras tion per krei matricon kiu enhavas Gaussian-normalan kurbojn. Ĝi aspektas kiel ĉi tio:

Figuro de meze C-a octavo. Notu ke la reala programo enhavos plenan pianan oktavaron.

Ĝi tiam multiplikas per la une dimensia matricon, kiu enhavas la valorojn de la frekvencingoj de Math::FFTW.

Ĉi tiu esence funkcias per kalkuili la sumon de ĉiu pianoklava atingopovo kiel ĝi okazas en la muzikeco.

Neeviteble la procezo uzas MULTAJN matricajn kalkuladojn inter GRANDEGAJ matricoj, kaj kreas multajn novmatricojn dum mallonga fojon, kiu tiam uzofinas ilin. Ĉi tiuj matricoj devas malekzisti post la funkcia regivanto.

Unue, mi elektis uzi la simplan matrican librejo, name Math::MatrixReal. Ĝi estis malrapida kaj mi devis skribi ĉirkaŭiron por kreado de la grandegaj matricoj. Ĝi verkis! ... sed ĝi estis M-A-L-R-A-P-I-D-A.

Mi elektis aliigi la programon uzi C-librejon kiu esperante plirapide kalkuli. Mi rave trovis Math::GSL, kiu havis specifikan funkciaron por matricoj per malmultaj malbezonaj komputoj. Ĝi havis vastan bazan linie algebran sistemon (BLAS) kiu faris ĉion mi devis fari! Kaj ankaŭ ĝi estis la santa GNU-a Scientifika Librejon! Jes!

Post la aliiĝi mi rimarkis ke dum la procezado de muziko, ĝi nun utiligis ~70 milionon batojn da storaĝo. Antaŭ ĝi estis utiliganta ~200 milionon batojn da storaĝo.

Ĉio ne estis bona. Nun mi havis problemon. Plu procezade la programo utiligis pli kaj pli storaĝon. Eventuale, ĝi utiligis 2 bilonon da batoj!

Mi eventuale sciiĝis la problemon. La GSL matricoj konsistas el du partoj: unu en Perl kaj unu en C. Kiam la Perl-a parto malekzistiĝis, la C-a parto survivis en storaĝo.

Bonŝance, mi legis la manlibrojn kaj sciiĝis ke oni devas fari ĉi tion:

use Math::GSL::Matrix qw/ :all /;

my $matrix = Math::GSL::Matrix->new($rows, $cols);

# ...

# purigu sin!
&gsl_matrix_free($matrix->raw);

Post tio, ĝi devas pli facile kuri.

Wednesday, February 11, 2009

Tiel ĝi komencas. Post du ĵaroj de atendeco, mi denove estas ekscribanta mian aŭtomatan muzikenklasigilan programon, nome Audicon.

La plejparto de miajn raciojn pro mia antaŭa rezigno (kaj pro miajn fushojn) estas ĉar me forgesis la malnovan aksiomo:

La plej grava unua produkto dum estigi bonan produkton, estas malperfekta produkto.

Esence, mi havis tro multajn idejon pri perfektigi la ekzistantan programon. Mi plene hore traserĉis por manieroj kiu perfektus malgrandan programaĝon. Mi eventuale rifuzis la liman programvortaron de Scilab kaj elektis uzi mian favoratan programlingvon, name Perl.

Pli detaloj pri la funkciojn estos venantaj...