Nous Ă©tudions le moteur VoIP Mediastreamer2. Partie 2

Article extrait de ma chaîne zen .



Créer un générateur de sons


Dans l' article précédent , nous avons installé la bibliothèque de streaming multimédia, les outils de développement et testé leur fonctionnement en créant une application d'essai.


Aujourd'hui, nous allons créer une application qui peut voir à travers une carte son sur une carte son. Pour résoudre ce problème, nous devons connecter les filtres au circuit générateur de sons illustré ci-dessous:


Circuit générateur de son


, . . , . . , , , . , .


, , . , . — . , ( ) . , , , . , , 10 .


. , , , . , . , — , . , , . , . , , . .


, , . . :


/*  mstest2.c */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
int main()
{
    ms_init();

    /*   . */
    MSFilter  *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
    MSFilter  *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
    MSSndCard *card_playback = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
    MSFilter  *snd_card_write = ms_snd_card_create_writer(card_playback);

    /*  . */
    MSTicker *ticker = ms_ticker_new();

    /*    . */
    ms_filter_link(voidsource, 0, dtmfgen, 0);
    ms_filter_link(dtmfgen, 0, snd_card_write, 0);

   /*   . */
   ms_ticker_attach(ticker, voidsource);

   /*   . */
   char key='1';
   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY, (void*)&key);

   /* , ,        .*/
   ms_sleep(2);   
}

, : voidsource, dtmfgen, snd_card_write. .


, , . , , , " " ( ).



ms_filter_link(src, src_out, dst, dst_in)

-, — ( , ). -, — .


( ). , — . , .


(DTMF) "1". ms_filter_call_method() MS_DTMF_GEN_PLAY, , .


:


$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`

:


$ ./mstest2

Après avoir démarré le programme, vous entendrez un court signal sonore composé de deux tonalités dans la dynamique de l'ordinateur.


Nous avons construit et lancé notre premier circuit sonore. Nous avons vu comment créer des instances de filtre, comment se connecter et comment appeler leurs méthodes. Satisfait du premier succès, nous devons encore faire attention au fait que notre programme ne libère pas la mémoire allouée avant la fin. Dans le prochain article, nous apprendrons comment nettoyer après nous-mêmes.


All Articles