Eksplore motè VoIP Mediastreamer2 la. Pati 2

Materyèl atik la pran nan men mwen zen channel.

Eksplore motè VoIP Mediastreamer2 la. Pati 2

Kreye yon dèlko Tone

Nan anvan an Atik Nou enstale bibliyotèk medya streamer, zouti devlopman ak teste fonksyonalite yo nan bati yon aplikasyon esè.

Jodi a nou pral kreye yon aplikasyon ki ka jenere yon siyal ton sou yon kat son. Pou rezoud pwoblèm sa a nou bezwen konekte filtè yo nan kous dèlko son yo montre anba a:

Eksplore motè VoIP Mediastreamer2 la. Pati 2

Nou li dyagram nan de goch a dwat, sa a se direksyon nan ki koule done nou an deplase. Flèch yo tou allusion sou sa. Rektang endike filtè ki trete blòk done yo epi ki bay rezilta a. Anndan rektang lan, yo endike wòl li epi yo endike kalite filtre a an lèt majiskil jis anba a. Flèch yo ki konekte rektang yo se ke moun kap kriye done kote blòk done yo delivre soti nan filtre nan filtre. An jeneral, yon filtè ka gen anpil entrées Et sorties.

Li tout kòmanse ak sous la revèy, ki mete tanpo a nan ki done yo kalkile nan filtè yo. Dapre sik revèy li yo, chak filtre trete tout blòk done ki nan opinyon li yo. Epi mete blòk ak rezilta a soti nan keu la. Premyèman, filtè ki pi pre sous revèy la fè kalkil, Lè sa a, filtè yo konekte ak rezilta li yo (ka gen anpil rezilta), ak sou sa. Apre dènye filtè nan chèn lan fini pwosesis, ekzekisyon sispann jiskaske yon nouvo revèy rive. Bat, pa default, swiv yon entèval nan 10 milisgond.

Ann retounen nan dyagram nou an. Sik revèy yo rive nan opinyon sous silans la; sa a se yon filtè, ki okipe jenere yon blòk done ki gen zewo nan pwodiksyon li yo pou chak sik revèy. Si nou konsidere blòk sa a kòm yon blòk echantiyon son, Lè sa a, sa a pa gen anyen plis pase silans. Nan premye gade, li sanble etranj jenere blòk done ak silans - apre tout, li pa ka tande, men blòk sa yo nesesè pou operasyon an nan dèlko a siyal son. Dèlko a sèvi ak blòk sa yo tankou yon fèy papye vid, anrejistre echantiyon son nan yo. Nan eta nòmal li yo, dèlko a etenn epi tou senpleman voye blòk opinyon nan pwodiksyon an. Kidonk, blòk silans pase san okenn chanjman nan kous la tout antye de goch a dwat, fini nan kat son an. Ki an silans pran blòk nan keu ki konekte ak opinyon li yo.

Men, tout bagay chanje si yo bay dèlko a yon kòmand pou jwe son, li kòmanse jenere echantiyon son epi ranplase yo ak echantiyon nan blòk yo antre epi li mete blòk yo chanje nan pwodiksyon an. Kat son an kòmanse jwe son. Anba a se yon pwogram ki aplike plan travay ki dekri anwo a:

/* Файл 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);   
}

Apre inisyalize streamer medya a, twa filtè yo kreye: voidsource, dtmfgen, snd_card_write. Yon sous revèy kreye.

Lè sa a, ou bezwen konekte filtè yo an akò ak kous nou an, ak sous la revèy dwe konekte dènye, depi apre sa a kous la pral imedyatman kòmanse opere. Si ou konekte yon sous revèy nan yon sikwi ki pa fini, li ka rive ke streamer medya a aksidan si li detekte omwen yon filtè nan chèn lan ak tout antre oswa tout rezilta "pandye nan lè a" (pa konekte).

Konekte filtè yo fè lè l sèvi avèk fonksyon an

ms_filter_link(src, src_out, dst, dst_in)

kote premye agiman an se yon pwent sou filtè sous la, dezyèm agiman an se nimewo pwodiksyon sous la (remake ke entrées ak rezilta yo nimewote apati zewo). Twazyèm agiman an se yon konsèy sou filtè reseptè a, katriyèm lan se nimewo opinyon reseptè a.

Tout filtè yo konekte epi sous revèy la konekte dènye (apwe sa nou pral tou senpleman rele li yon ticker). Apre sa, sikwi son nou an kòmanse travay, men pa gen anyen ki ka tande nan moun ki pale òdinatè yo ankò - dèlko a son etenn epi tou senpleman pase nan blòk yo done opinyon ak silans. Pou kòmanse jenere yon ton, ou bezwen kouri metòd filtre dèlko a.

Nou pral jenere yon siyal de-ton (DTMF) ki koresponn ak peze bouton "1" nan telefòn nan. Pou fè sa, nou itilize fonksyon an ms_filter_call_method() Nou rele metòd MS_DTMF_GEN_PLAY, pase li kòm yon agiman yon konsèy sou kòd ki siyal la lèktur ta dwe koresponn ak.

Tout sa ki rete se konpile pwogram nan:

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

Epi kouri:

$ ./mstest2

Apre ou fin kòmanse pwogram nan, ou pral tande yon siyal son kout ki gen de ton nan oratè òdinatè a.

Nou konstwi e lanse premye kous son nou an. Nou te wè ki jan yo kreye ka filtre, ki jan yo konekte yo ak ki jan yo rele metòd yo. Pandan ke nou kontan ak siksè inisyal nou an, nou toujou bezwen peye atansyon sou lefèt ke pwogram nou an pa libere memwa ki resevwa lajan an anvan yo sòti. Nan pwochen an Atik nou pral aprann netwaye apre tèt nou.

Sous: www.habr.com

Add nouvo kòmantè