Attention, ce n'est pas un réquisitoire contre une chaîne de restauration rapide bien connue, mais une réaction à chaud à la lecture d'un article du monde : La diversité culturelle, ennemie des Etats-Unis.

Que faire pour lutter ?

Soyons pessimiste et supposons que les Etats-Unis d'Amériques parviennent à leurs fins et que les cultures nationales ne puissent plus être protégées, et que les productions locales déclinent au profits des grandes corporations mondiales de l'industrie culturelle.

Autrement dit, faisons le pari que la situation tournera franchement en la défaveur de la diversité culturelle. De sorte que toute la culture soit formatée.

Toute ? Non, il y aura toujours un camps retranché d'irreductibles, ne serait-ce que parce que toute société comporte une part d'individus rebelles.

Les armes de la culture alternatives

Face à des sociétés dotés de moyens financier énormes, se battre avec les mêmes armes que l'industrie culturelle mène au naufrage avant même de sortir de la cale sèche.

Face à la propriété intellectuelle qui thésaurise la diffusion de la culture (achète ta copie sinon tu es un voleur –principe que je respecte au passage–), il y a l'abandon de certains de ces droits (je te donne une copie, et je t'autorise à dupliquer ces copies et à les diffuser sans rien en retour). C'est le principe des licenses Creative Commons, qui permettent une large palette de choix dans les libertés que l'auteur peut choisir d'accorder.

Face au marketing et les réseaux de distributions, il y a le bouche-à-oreilles les nouvelles technologies (Internet notamment).

Face aux verroux technologiques (les fameuses protection anti-copie), utiliser des formats ouverts et autorisant la duplication à l'infini.

Lutter, pour quoi faire ?

Ce qui est beau dans la culture, c'est que tout est culture, il n'y a pas de limites. Ceci étant dit, je vois plusieurs pistes principales :

  • Diffuser le patrimoine culturel du domaine public, l'utiliser comme base pour une version adaptée (par exemple une musique classique en version hard-rock-métal)
  • Créer et diffuser des oeuvres originales. N'ayons pas peur, on fera certainement mieux que la Star'Ac !

Mes résolutions pour 2005

  • Consommer moins formaté, plus alternatif. Boycott des produits protégés contre la copie (faux CD et DVD soumis à une zone régionale (ce qui ne me laisse plus que les DVD pour adultes :op principalement).
  • Diffusion de créations originales avec une license Créative-Commons, en utilisant un format ouvert.

Merci à la Pologne...

Le 21 Décembre 2004 à 17:30

...pour avoir déjoué la tentative de passage en force des partisans d'une brevetabilité sans limites sur les idées, alias "brevets sur les inventions mettant en oeuvre des programmes informatiques", ou "brevets logiciels".

Puisqu'ils faut le rappeler, les partisans de cette brevetabilité ehontée sont :

  • Les offices des brevets, qui font payer -cher- des dépôts de brevets, sans y accorder les moyens nécessaires (temps, personnels) pour vérifier la validité, au nom de la sacro-sainte rentabilité. Bref, ceux qui était censés protéger l'inventeur tout en permettant la diffusion des innovations se sont transformés en "machines à tamponner des brevets bidons et abusifs" (cette expression est de moi et exprime mon sentiment personnel).
  • Les cabinets d'avocats spécialisés, qui, en contournant le langage des lois et des conventions, ont dores et déjà permis le dépôt illégal de plus de 30000 brevets abusifs.
  • Les grandes sociétés, principalement américaines et japonaises, qui ont déjà cette "culture" du brevet.

Bref, ce n'est pas l'intérêt général qui bénéficierait de la brevetabilité.

Source

http://swpat.ffii.org/
Brevets logiciels en Europe.
http://www.ffii.fr/
Brevets logiciels en France.
http://kwiki.ffii.org/
Wiki sur les brevets logiciels.

Mon futur lecteur OGG/MP3...

Le 16 Décembre 2004 à 18:35

And the winner is... MHD-150 par ISM Technologie

Caractéristiques

Formats supportés
OGG Vorbis, MP3, WMA, ASF, WAV
Connectique
USB2
Capacité
1.5 Go
Prix
219 euros chez Surcouf.

Entrer un seul mot dans le champs.

Tradukaĵoj de Majstro Aplikaĵoj

Français → Esperanto

  

Esperanto → Français

  

S4MFR : partie 2

Le 01 Décembre 2004 à 14:27

Spécification fonctionnelles générales

L'utilisation type de la librairie serait la suivant :

  • On appelle une fonction d'initialisation avec en paramètre une chaine de caractère représentant le nom complet d'un fichier (par exemple /home/david/Mes Documents/super musique.mid). On obtient une structure qui contient des données sur le fichier midi (taille, format, nombre de piste, etc...)
  • On appelle ensuite une fonction de parcours, en fournissant la structure précédemment obtenue et la piste à parcourir. On obtient une structure qui contient un évènement Midi. Les pointeurs internes pour la piste concernée sont mis à jours, de sorte que le prochain appel à la fonction de parcours renvoie l'évènement midi suivant. Si on est en fin de piste, on renvoie NULL (0).
  • Enfin, une fonction de positionnement permettra, à partir d'une structure sur le fichier midi, le numéro d'une piste et d'une valeur de décalage i de positionner les pointeurs internes d'une piste sur le i-ème élément, récupérable ensuite avec la fonction de parcours.

Les fonctions renverront toutes un code de retour :

0
échec
1
réussite

Afin de pouvoir analyser un échec, on doit disposer d'un mécanisme de diagnostic : une fonction retournera une structure représentant une erreur.

Enfin, pour découpler l'accès aux données des structures de l'implémentation des structures, la librairie fournira des fonctions pour accéder à ces informations. On retrouve ici une approche orientée objet (note pour plus tard : concevoir un ensemble de classes qui encapsule l'API de cette librairie).

Récapitulatif

Types à définir

On ne détaille pas encore l'implémentation des structures.

S4mfrStandardMidiFileInfo
Structure regroupant les informations globales d'un fichier MIDI standard (fichier, type, nombre de piste, pointeurs internes, etc...)
S4mfrMidiEvent
Structure regroupant les informations relatives à un évènement midi (instant, type, données supplémentaires)
S4mfrError
Structure permettant le diagnostique de la dernière erreur rencontrée.
S4mfrString
Un alias d'un type (usuellement char *) représentant une chaine de caractères.

Les fonctions

On utilise une pseudo type String pour représenter le type finalement utilisé pour une chaîne de caractères. On ne liste pas les accesseurs, car on n'a pas encore décidé des informations à récupérer et à stocker dans les structures.

On préfixe toutes les fonctions par S4mfr_

unsigned int S4mfr_openStandardMidiFile(String fileName, S4mfrStandardMidiFileInfo** standardMidiFileInfo, S4mfrError** error)
Ouvre un fichier midi et créée une structure StandardMidiFileInfo.
Erreur si on ne peut pas charger le fichier ou si il y a une incohérence dans la taille du fichier et les informations de longueur.
unsigned int S4mfr_closeStandardMidiFile(S4mfrStandardMidiFileInfo* standardMidiFileInfo, S4mfrError** error)
Libère les ressources utilisée par S4mfr_openStandardMidiFile.
Erreur si on ne peut pas libérer les ressources (déjà libérées par exemple).
unsigned int S4mfr_getNextEvent(S4mfrStandardMidiFileInfo* standardMidiFileInfo, unsigned int track, S4mfrMidiEvent**, S4mfrError** error)
Récupère un évènement d'une piste est avance d'un cran das la liste des évènement.
Erreur si on ne peut pas pas avancer (arrivée en fin de piste).
String S4mfr_getErrorCode(S4mfrError* error)
Récupère un code d'erreur à partir d'une structure de diagnostique.
int S4mfr_getErrorLevel(S4mfrError* error)
Récupère un niveau de sévérité d'erreur à partir d'une structure de diagnostique.
String S4mfr_getErrorMessage(S4mfrError* error)
Récupère un message d'erreur à partir d'une structure de diagnostique.

S4MFR : partie 1

Le 01 Décembre 2004 à 12:12

Naissance d'un projet

Dans le cadre de ma démarche pour améliorer mes compétence de développeur C/C++ sous Linux, j'ai besoin d'un petit projet pour commencer à mettre en pratique les Autotools de GNU. Or il se trouve que j'ai créé des fichiers MIDI avec le Logiciel Big Boss de Rythm'n Soft, et la reprise de ces fichiers dans un autre séquenceur n'est pas satisfaisante (mauvaise affectation des instruments par exemple). Je suppose que cela est liée au méchanisme des pistes virtuelles du logiciel qui permet d'avoir plusieur version d'une même piste.

Je vais donc écrire une petite librairie de fonction permettant d'extraire les données d'un fichier MIDI standard, le but étant ensuite d'écrire avec cette librairie un programme qui à partir d'un fichier MIDI génère un rapport en HTML pour voir ce qui ce passe.

Ressources

L'organisation MIDI Manufacturers Association
Le site central pour les références (payantes)
Standard MIDI Files 1.0 July, 1988
Une autre description du format MIDI
Wotsit
Un site permettant de trouver les spécifications de la plupart des formats de fichier

Annexes

Pour retrouver rapidement les infos, je recopie ci-après l'article de Dustin Caldwell sur les fichier midi, trouvé sur Wotsit.

Standard MIDI File Format, par Dustin Caldwell

= 128). A list of most of these commands is in appendix A. Each
command has different parameters and lengths, but the data that follows the
command will have a msb of 0 (less than 128). The exception to this is a meta-
event, which may contain data with a msb of 1. However, meta-events require a
length parameter which alleviates confusion. 
      One subtlety which can cause confusion is running mode. This is where
the actual midi command is omitted, and the last midi command issued is
assumed. This means that the midi event will consist of a delta-time and the
parameters that would go to the command if it were included. 

4. Conclusion

      If this explanation has only served to confuse the issue more, the
appendices contain examples which may help clarify the issue. Also, 2
utilities and a graphic file should have been included with this document: 

DEC.EXE - This utility converts a binary file (like .MID) to a tab-delimited
text file containing the decimal equivalents of each byte.

REC.EXE - This utility converts a tab-delimited text file of decimal values
into a binary file in which each byte corresponds to one of the decimal
values.

MIDINOTE.PS - This is the postscript form of a page showing note numbers with
a keyboard and with the standard grand staff.
                                  Appendix A

1. MIDI Event Commands

Each command byte has 2 parts. The left nybble (4 bits) contains the actual
command, and the right nybble contains the midi channel number on which the
command will be executed. There are 16 midi channels, and 8 midi commands (the
command nybble must have a msb of 1).
In the following table, x indicates the midi channel number. Note that all
data bytes will be <128 (msb set to 0).

Hex      Binary       Data          Description
8x       1000xxxx     nn vv         Note off (key is released)
                                    nn=note number
                                    vv=velocity

9x       1001xxxx     nn vv         Note on (key is pressed)
                                    nn=note number
                                    vv=velocity

Ax       1010xxxx     nn vv         Key after-touch
                                    nn=note number
                                    vv=velocity

Bx       1011xxxx     cc vv         Control Change
                                    cc=controller number
                                    vv=new value

Cx       1100xxxx     pp            Program (patch) change
                                    pp=new program number

Dx       1101xxxx     cc            Channel after-touch
                                    cc=channel number

Ex       1110xxxx     bb tt         Pitch wheel change (2000H is normal or no
                                    change)
                                    bb=bottom (least sig) 7 bits of value
                                    tt=top (most sig) 7 bits of value
The following table lists meta-events which have no midi channel number. They
are of the format:

FF xx nn dd

All meta-events start with FF followed by the command (xx), the length, or
number of bytes that will contain data (nn), and the actual data (dd).

Hex      Binary       Data          Description
00       00000000     nn ssss       Sets the track's sequence number.
                                    nn=02 (length of 2-byte sequence number)
                                    ssss=sequence number

01       00000001     nn tt ..      Text event- any text you want.
                                    nn=length in bytes of text
                                    tt=text characters

02       00000010     nn tt ..      Same as text event, but used for
                                    copyright info.
                                    nn tt=same as text event

03       00000011     nn tt ..      Sequence or Track name
                                    nn tt=same as text event

04       00000100     nn tt ..      Track instrument name
                                    nn tt=same as text event

05       00000101     nn tt ..      Lyric
                                    nn tt=same as text event

06       00000110     nn tt ..      Marker
                                    nn tt=same as text event

07       00000111     nn tt ..      Cue point
                                    nn tt=same as text event

2F       00101111     00            This event must come at the end of each
                                    track

51       01010001     03 tttttt     Set tempo
                                    tttttt=microseconds/quarter note

58       01011000     04 nn dd ccbb Time Signature
                                    nn=numerator of time sig.
                                    dd=denominator of time sig. 2=quarter
                                    3=eighth, etc.
                                    cc=number of ticks in metronome click
                                    bb=number of 32nd notes to the quarter
                                    note

59       01011001     02 sf mi      Key signature
                                    sf=sharps/flats (-7=7 flats, 0=key of C,
                                    7=7 sharps)
                                    mi=major/minor (0=major, 1=minor)

7F       01111111     xx dd ..      Sequencer specific information
                                    xx=number of bytes to be sent
                                    dd=data
The following table lists system messages which control the entire system.
These have no midi channel number. (these will generally only apply to
controlling a midi keyboard, etc.)

Hex      Binary       Data          Description
F8       11111000                   Timing clock used when synchronization is
                                    required.

FA       11111010                   Start current sequence

FB       11111011                   Continue a stopped sequence where left
                                    off

FC       11111100                   Stop a sequence


The following table lists the numbers corresponding to notes for use in note 
on and note off commands.


Octave||                     Note Numbers
   #  ||
      || C   | C#  | D   | D#  | E   | F   | F#  | G   | G#  | A   | A#  | B
-----------------------------------------------------------------------------
   0  ||   0 |   1 |   2 |   3 |   4 |   5 |   6 |   7 |   8 |   9 |  10 | 11
   1  ||  12 |  13 |  14 |  15 |  16 |  17 |  18 |  19 |  20 |  21 |  22 | 23
   2  ||  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  32 |  33 |  34 | 35
   3  ||  36 |  37 |  38 |  39 |  40 |  41 |  42 |  43 |  44 |  45 |  46 | 47
   4  ||  48 |  49 |  50 |  51 |  52 |  53 |  54 |  55 |  56 |  57 |  58 | 59
   5  ||  60 |  61 |  62 |  63 |  64 |  65 |  66 |  67 |  68 |  69 |  70 | 71
   6  ||  72 |  73 |  74 |  75 |  76 |  77 |  78 |  79 |  80 |  81 |  82 | 83
   7  ||  84 |  85 |  86 |  87 |  88 |  89 |  90 |  91 |  92 |  93 |  94 | 95
   8  ||  96 |  97 |  98 |  99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107
   9  || 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119
  10  || 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 |


                                BIBLIOGRAPHY

  "MIDI Systems and Control" Francis Rumsey  1990 Focal Press

  "MIDI and Sound Book for the Atari ST" Bernd Enders and Wolfgang Klemme
          1989 M&T Publishing, Inc.

  MIDI file specs and general MIDI specs were also obtained by sending e-mail
         to LISTSERV@AUVM.AMERICAN.EDU with the phrase GET MIDISPEC PACKAGE
         in the message.


------------------------------- DEC.CPP ------------------------------------

/*  file  dec.cpp

by  Dustin Caldwell    (dustin@gse.utah.edu)

*/


#include 
#include 
#include 

void helpdoc();

main()
{
        FILE *fp;

        unsigned char ch, c;

        if((fp=fopen(_argv[1], "rb"))==NULL)            /* open file to read */
        {
                printf("cannot open file %sn",_argv[1]);
                helpdoc();
                exit(-1);
        }

        c=0;
        ch=fgetc(fp);

        while(!feof(fp))                        /* loop for whole file */
        {
                printf("%ut", ch);             /* print every byte's decimal equiv. */
                c++;
                if(c>8)                                 /* print 8 numbers to a line */
                {
                        c=0;
                        printf("n");
                }

                ch=fgetc(fp);
        }

        fclose(fp);                     /* close up */
}

void helpdoc()                  /* print help message */
{
        printf("n   Binary File Decodernn");

        printf("n Syntax:  dec binary_file_namenn");

        printf("by Dustin Caldwell  (dustin@gse.utah.edu)nn");
        printf("This is a filter program that reads a binary filen");
        printf("and prints the decimal equivalent of each byten");
        printf("tab-separated. This is mostly useful when piped n");
        printf("into another file to be edited manually.  eg:nn");
        printf("c:>dec sonata3.mid > son3.txtnn");
        printf("This will create a file called son3.txt which cann");
        printf("be edited with any ascii editor. nn");
        printf("(rec.exe may also be useful, as it reencodes the n");
        printf("ascii text file).nn");
        printf("Have Fun!!n");
}

---------------------------- REC.CPP ----------------------------------

/*  File  rec.cpp
        by Dustin Caldwell   (dustin@gse.utah.edu)
*/

#include 
#include 
#include 
#include 

void helpdoc();

main()
{
        FILE *rfp, *wfp;

        unsigned char ch, c;
        char s[20];

        if((rfp=fopen(_argv[1], "r"))==NULL)                    /* open the read file */
        {
                printf("cannot open file %s n",_argv[1]);
                helpdoc();
                exit(-1);
        }

        if((wfp=fopen(_argv[2], "wb"))==NULL)                   /* open the write file */
        {
                printf("cannot open file %s n",_argv[1]);
                helpdoc();
                exit(-1);
        }

        c=0;

        ch=fgetc(rfp);

        while(!feof(rfp))                       /* loop for whole file */
        {

                if(isalnum(ch))                 /* only 'see' valid ascii chars */
                {
                        c=0;
                        while(isdigit(ch))      /* only use decimal digits (0-9) */
                        {
                                s[c]=ch;        /* build a string containing the number */
                                c++;
                                ch=fgetc(rfp);
                        }
                        s[c]=NULL;                      /* must have NULL terminator */

                        fputc(atoi(s), wfp);/* write the binary equivalent to file */

                }

                ch=fgetc(rfp);                  /* loop until next number starts */


        }

        fclose(rfp);                    /* close up */
        fclose(wfp);
}


void helpdoc()          /* print help message */
{
        printf("n   Text File Encodernn");

        printf("n Syntax:  rec text_file_name binary_file_namenn");

        printf("by Dustin Caldwell  (dustin@gse.utah.edu)nn");
        printf("This is a program that reads an ascii tab-n");
        printf("delimited file and builds a binary file wheren");
        printf("each byte of the binary file is one of the decimaln");
        printf("digits in the text file.n");
        printf(" eg:nn");
        printf("c:>rec son3.txt son3.midnn");
        printf("(This will create a file called son3.mid which isn");
        printf("a valid binary file)nn");
        printf("(dec.exe may also be useful, as it decodes binary files)nn");
        printf("Have Fun!!n");
}
]]>

Prochaines lectures...

Le 01 Décembre 2004 à 11:35

Bonjour Paresse
Corinne Maier
ed. Michalon (29 avril 2004)
ISBN : 2841862313
Antimanuel d'économie
Bernard Maris
ed. Bréal (6 novembre 2003)
ISBN : 2749500788
Lettre aux gourous de l'économie qui nous prennent pour des imbéciles
Bernard Maris
ed. Albin Michel (1 avril 1999)
ISBN : 2226108351
La Grande Désillusion
Joseph Eugene Stiglitz (trad. par Paul Chemla)
ed. Le Livre de Poche (24 septembre 2003)
ISBN : 2253155381