Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/01/2011, à 18:10

R2D2-Ubuntu

Audacity et LADSPA

Salut à tous.
Bon j'ai rien trouvé de clair sur le net. Ou je suis débile mais ça fait une journée que je cherche...
Comment on fait marcher un plugin LADSPA avec audacity?
Je possède un fichier qui a été programmé par un ami et que je dois ajouter aux effets d'audacity.
Il faut que je le mette dans /usr/share/audacity/plug-ins ? Okay mais quelle extension doit avoir le fichier (c'est un simple fichier texte pour le moment.)?
Ou bien il faut faire autre chose?
J'ai bien coché dans audacity le fait qu'il utilise LADSPA.

Merci de m'éclairer ça m'énerve y'a rien de clair là-dessus et personne n'est malheureusement capable de m'expliquer clairement.

Hors ligne

#2 Le 02/01/2011, à 08:32

allany

Re : Audacity et LADSPA

Bonjour,

Je ne suis pas certain de bien comprendre la question mais si c'est bien :
"où dois-je stocker un nouveau plugin ladspa ?",
ceux-ci se trouvent soit dans /usr/lib/ladspa, soit dans /usr/local/lib/ladspa et sont suffixés en ".so".
Pour ajouter ce nouveau plugin, je te conseille de lui appliquer des droits d'accès maximum en faisant :
sudo chmod a+rwx nom_du_plugin
Audacity devrait alors automatiquement te proposer ce plugin dans sa liste des effets mais peut-être n'en disposeras-tu pas en interactif, comme c'est le cas de plusieurs plugins existants...

A+

Hors ligne

#3 Le 02/01/2011, à 10:03

R2D2-Ubuntu

Re : Audacity et LADSPA

Merci de ta réponse.
Oui c'était pour savoir où le stocker.
Autrement vu que c'est un fichier texte, écris en C, il faut que je lui mette l'extension .c et que je le compile?
Puis le .so je le met où il faut? hmm

Hors ligne

#4 Le 02/01/2011, à 10:21

allany

Re : Audacity et LADSPA

Oui, je suppose qu'il faut le compiler.
Après, il semble que le ".so" signifie "Shared Object" et je suppose donc que ça se comporte en librairie...
Mais je n'ai jamais fait ce genre de manip'. Il faudrait peut-être aller regarder dans le makefile du programme ce qui est censé être généré en sortie du make ?
A+

Hors ligne

#5 Le 02/01/2011, à 11:05

R2D2-Ubuntu

Re : Audacity et LADSPA

J'ai pas de makefile j'ai juste le fichier écrit en C ...
C'est facheux j'y comprend à moitié rien... hmm
Ca n'a pas l'air si compliqué que ça pourtant...

Hors ligne

#6 Le 02/01/2011, à 11:48

allany

Re : Audacity et LADSPA

Bon. Ce n'est plus le sujet initial puisqu'il s'agit de trouver comment compiler...
Ton fichier est-il bien suffixé en ".c" ?
Ton compilateur (gcc ?) est-il bien installé ?
Auquel cas, si mes souvenirs sont bons, il faut faire un truc genre :
gcc nom_programme.c
qui devrait produire un exécutable nommé a.out, par défaut, lancé en entrant :
./a.out
Si cette étape se passe bien, renomme le a.out, donne-lui les droits expliqués + haut et place-le où tu le souhaites.
Mais, pour être connu en tant que plugin, il me semble qu'il doit obligatoirement être suffixé en ".so" et se trouver dans le répertoire des plugins (ladspa, lv2,...). Pas sûr que tu obtiennes un ".so" en sortie de ta compil'.

A+

Hors ligne

#7 Le 02/01/2011, à 12:07

allany

Re : Audacity et LADSPA

Après quelques recherches, j'ai trouvé ce lien où le § 3.5 semble expliquer comment créer un ladspa à partir d'un source C, avec les options de compilation adéquates.

A+

Hors ligne

#8 Le 02/01/2011, à 12:08

alej

Re : Audacity et LADSPA

R2D2-Ubuntu a écrit :

Ca n'a pas l'air si compliqué que ça pourtant...

J'ai jamais fait, mais effectivement, ça n'a pas l'air très compliqué... big_smile

Hors ligne

#9 Le 02/01/2011, à 14:30

R2D2-Ubuntu

Re : Audacity et LADSPA

Okay je vois comment compiler.
Maintenant j'ai ce fichier codé en C pour le LADSPA, j'ai des erreurs.
Je suis nul en C... Je comprend pas les erreurs...

#define ORDER 15
#define CHECK_NULL_POINTER(p) \
    (((p)==NULL)?return NULL:0)
#define CAST_HANDLE() \
    LMSFilter* self; \
    self=(LSMFilter*) _self
#define INPUT_PORT 0
#define OUTPUT_PORT 1
#define GET_INPUT_SAMPLE (i) \
    (((i)<0)?self->buffer[ORDER-1+i]:self->inputPort[i])

typedef struct{
    /*Ports*/
    LADSPA_Data* inputPort;
    LADSPA_Data* outputPort;
    LADSPA_Data* buffer;
    LADSPA_Data* b;
} LMSFilter


LADSPA_Handle instanciateLMSFilter(const LADSPA_Descriptor* descriptor, unsigned long simpleRate){

    LMSFilter* self;
    self = (LMSFilter*)malloc(sizeof(LMSFilter));
    CHECK_NULL_POINTER(self);
    
    self->buffer=(LADSPA_Data*)calloc(ORDER-1,sizeof(LADSPA_Data));
    CHECK_NULL_POINTER(self->buffer);
    self->b=(LADSPA_Data*)calloc(ORDER,sizeof(LADSPA_Data));
    return self;
}

void activateLMSFilter(LADSPA_Handle _self){
    CAST_HANDLE();
    memset(self->buffer,0,(ORDER-1)*sizeof(LADSPA_Data));
    memset(self->b,0,ORDER*sizeof(LADSPA_Data));
    self->b[ORDER-1]=1;
}

void connectPortToLMSFilter(LADSPA_Handle _self, unsigned long port, LADSPA_Data* data){
    CAST_HANDLE();
    switch(port){
        case INPUT_PORT:
            self->inputPort=data;
            break;
        case OUTPUT_PORT:
            self->outputPort=data;
            break;
    }
}

LADSPA_Data computeHY(LMSFilter* self, unsigned long index){
    LADSPA_Data result = 0;
    unsigned long i;
    for(i=0;i<ORDER;i++){
        result += GET_INPUT_SAMPLE(index-i)*self->b[ORDER-1-i];
    }
    return result;
}


/*
unsigned long n;
for(n=0;n<sampleCount;n++){
    self->outputPort[n] = GET_INPUT_SAMPLE(n-1-computeHY(n));
}
*/



}

La compilation me retourne :

gcc -fPIC -DPIC -Wall -O2 -c -o lmsmod.o lmsmod.c

lmsmod.c:14: error: expected specifier-qualifier-list before 'LADSPA_Data'
lmsmod.c:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'LADSPA_Handle'
lmsmod.c:33: error: expected ')' before '_self'
lmsmod.c:40: error: expected ')' before '_self'
lmsmod.c:52: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'computeHY'
lmsmod.c:71: error: expected identifier or '(' before '}' token

Ce que j'essaie en fait de faire est un filtre prédicteur de type LMS.
http://en.wikipedia.org/wiki/Least_mean_squares_filter

L'équation de ce filtre discret est :

 $\widehat{x}[n-i] = \sum_{i=1}^p x[n-i]*b[p-i+1]$\\
 avec :\\
 $e[n] = x[n]-\widehat{x}[n]$\\
 $b[i\_{n}] = b[i\_{n-1}]+lr*e[n]*x[n+i-p-1]$\\

(c'est du latex)

Dernière modification par R2D2-Ubuntu (Le 02/01/2011, à 14:31)

Hors ligne