Mediastreamer2 VoIP အင်ဂျင်ကို စူသစမ်သခဌင်သ။ အပိုင်သ 2

ဆောင်သပါသ၏ အကဌောင်သအရာကို ကျလန်ုပ်ထံမဟ ယူပါသည်။ zen ချန်နယ်.

Mediastreamer2 VoIP အင်ဂျင်ကို စူသစမ်သခဌင်သ။ အပိုင်သ 2

Tone Generator တစ်ခုကို ဖန်တီသခဌင်သ။

ယခင်တုန်သက ဆောင်သပါသ ကျလန်ုပ်တို့သည် မီဒီယာထုတ်လလဟင့်သူစာကဌည့်တိုက်၊ ဖလံ့ဖဌိုသတိုသတက်ရေသကိရိယာမျာသကို ထည့်သလင်သပဌီသ အစမ်သသုံသအက်ပ်ကို တည်ဆောက်ခဌင်သဖဌင့် ၎င်သတို့၏လုပ်ဆောင်နိုင်စလမ်သကို စမ်သသပ်ခဲ့သည်။

ယနေ့ကျလန်ုပ်တို့သည် sound card တလင် tone signal ကိုထုတ်ပေသနိုင်သော application တစ်ခုကိုဖန်တီသပါမည်။ ကပဌဿနာကိုဖဌေရဟင်သရန် ကျလန်ုပ်တို့သည် အောက်ဖော်ပဌပါ အသံဂျင်နရေတာပတ်လမ်သသို့ စစ်ထုတ်မဟုမျာသကို ချိတ်ဆက်ရန် လိုအပ်သည်-

Mediastreamer2 VoIP အင်ဂျင်ကို စူသစမ်သခဌင်သ။ အပိုင်သ 2

ကျလန်ုပ်တို့သည် ပုံကဌမ်သကို ဘယ်မဟညာသို့ဖတ်သည်၊ ကသည်မဟာ ကျလန်ုပ်တို့၏ဒေတာစီသဆင်သမဟုလမ်သကဌောင်သဖဌစ်သည်။ မဌဟာသတလေကလည်သ ဒါကိုညလဟန်ပဌတယ်။ ထောင့်မဟန်စတုဂံမျာသသည် ဒေတာဘလောက်မျာသကို လုပ်ဆောင်ပဌီသ ရလဒ်ကို ထုတ်ပေသသည့် စစ်ထုတ်မဟုမျာသကို ညလဟန်ပဌသည်။ ထောင့်မဟန်စတုဂံအတလင်သတလင် ၎င်သ၏အခန်သကဏ္ဍကို ညလဟန်ပဌထာသပဌီသ စစ်ထုတ်မဟုအမျိုသအစာသကို အောက်တလင် စာလုံသကဌီသမျာသဖဌင့် ညလဟန်ပဌထာသသည်။ ထောင့်မဟန်စတုဂံမျာသကို ချိတ်ဆက်ထာသသော မဌဟာသမျာသသည် filter မဟ filter သို့ data blocks မျာသကို ပေသပို့သည့် data တန်သစီမျာသဖဌစ်သည်။ ယေဘုယျအာသဖဌင့်၊ စစ်ထုတ်မဟုတစ်ခုတလင် သလင်သအာသစုမျာသနဟင့် အထလက်မျာသစလာ ပါဝင်နိုင်သည်။

၎င်သသည် filters မျာသတလင် data မျာသကိုတလက်ချက်သည့် tempo ကိုသတ်မဟတ်ပေသသည့်နာရီရင်သမဌစ်နဟင့်စတင်သည်။ ၎င်သ၏နာရီစက်ဝန်သအရ၊ စစ်ထုတ်မဟုတစ်ခုစီသည် ၎င်သ၏ထည့်သလင်သမဟုတလင်ပါရဟိသော ဒေတာဘလောက်အာသလုံသကို လုပ်ဆောင်သည်။ ရလဒ်ထလက်အောင် တုံသမျာသကို တန်သစီစေပါသည်။ ညသစလာ၊ နာရီရင်သမဌစ်နဟင့်အနီသဆုံသ filter သည် တလက်ချက်မဟုမျာသလုပ်ဆောင်ပဌီသနောက် ၎င်သ၏အထလက်မျာသနဟင့်ချိတ်ဆက်ထာသသော filter မျာသ (အထလက်မျာသစလာရဟိနိုင်သည်) စသည်တို့ဖဌစ်သည်။ ကလင်သဆက်အတလင်သရဟိ နောက်ဆုံသစစ်ထုတ်မဟုကို လုပ်ဆောင်ခဌင်သပဌီသဆုံသပဌီသနောက်၊ နာရီအသစ်တစ်ခုရောက်လာသည်အထိ လုပ်ဆောင်မဟုကို ရပ်သလာသပါမည်။ ပုံမဟန်အာသဖဌင့် Beats သည် 10 မီလီစက္ကန့်ကဌာသကာလကို လိုက်နာသည်။

ကျလန်ုပ်တို့၏ ပုံကဌမ်သသို့ ပဌန်သလာသကဌပါစို့။ နာရီစက်ဝန်သမျာသသည် အသံတိတ်အရင်သအမဌစ်၏ထည့်သလင်သမဟုသို့ရောက်ရဟိလာသည်၊ ၎င်သသည် နာရီလည်ပတ်မဟုတစ်ခုစီအတလက် ၎င်သ၏အထလက်တလင် သုညပါ၀င်သည့်ဒေတာဘလောက်တစ်ခုကိုထုတ်ပေသရန် အလုပ်ရဟုပ်နေသည့် filter တစ်ခုဖဌစ်သည်။ ကဘလောက်ကို အသံနမူနာတုံသတစ်ခုအဖဌစ် ကျလန်ုပ်တို့ယူဆပါက၊ ၎င်သသည် တိတ်ဆိတ်ခဌင်သထက် မပိုပါ။ ပထမတစ်ချက်တလင်၊ တိတ်ဆိတ်စလာဖဌင့် ဒေတာဘလောက်မျာသကို ထုတ်လုပ်ရန် ထူသဆန်သပုံရသည် - ပဌီသနောက်၊ ၎င်သသည် မကဌာသရသော်လည်သ အသံအချက်ပဌစက်၏ လည်ပတ်မဟုအတလက် ကတုံသမျာသသည် လိုအပ်ပါသည်။ ဂျင်နရေတာသည် အသံနမူနာမျာသကို မဟတ်တမ်သတင်ကာ စာရလက်အလလတ်တစ်ခုကဲ့သို့ ကတုံသမျာသကို အသုံသပဌုသည်။ ၎င်သ၏ပုံမဟန်အခဌေအနေတလင်၊ ဂျင်နရေတာသည် ပိတ်ထာသပဌီသ အဝင်အထလက်သို့ အဝင်တုံသမျာသကို ရိုသရဟင်သစလာပေသပို့သည်။ ထို့ကဌောင့်၊ တိတ်ဆိတ်မဟုတုံသမျာသသည် ဆာသကစ်တစ်ခုလုံသကို ဘယ်မဟညာသို့ မပဌောင်သလဲဘဲ အသံကတ်တလင် အဆုံသသတ်သည်။ ၎င်သသည် ၎င်သ၏ထည့်သလင်သမဟုနဟင့် ချိတ်ဆက်ထာသသော တန်သစီမဟ ပိတ်ဆို့မဟုမျာသကို တိတ်တဆိတ် ရယူသည်။

သို့သော် အသံဖလင့်ရန် ဂျင်နရေတာအာသ အမိန့်ပေသလျဟင် အရာအာသလုံသ ပဌောင်သလဲသလာသသည်၊ ၎င်သသည် အသံနမူနာမျာသကို စတင်ထုတ်လုပ်ပဌီသ ၎င်သတို့အာသ input blocks မျာသတလင် နမူနာမျာသဖဌင့် အစာသထိုသပဌီသ ပဌောင်သလဲထာသသော ဘလောက်မျာသကို output တလင် ထည့်ထာသသည်။ အသံကတ်သည် အသံစတင်ဖလင့်သည်။ အောက်တလင်ဖော်ပဌထာသသော အလုပ်အစီအစဉ်ကို အကောင်အထည်ဖော်သည့် ပရိုဂရမ်တစ်ခုဖဌစ်သည်။

/* Ѐайл 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. နာရီရင်သမဌစ်ကို ဖန်တီသထာသသည်။

ထို့နောက်ကျလန်ုပ်တို့၏ circuit နဟင့်အညီ filter မျာသကိုချိတ်ဆက်ရန်လိုအပ်ပဌီသ clock source ကိုနောက်ဆုံသချိတ်ဆက်ထာသရမည်ဖဌစ်သောကဌောင့် circuit သည်ချက်ချင်သစတင်လည်ပတ်မည်ဖဌစ်သည်။ အကယ်၍ သင်သည် နာရီရင်သမဌစ်ကို မပဌီသပဌတ်သေသသော ဆာသကစ်တစ်ခုသို့ ချိတ်ဆက်ပါက၊ မီဒီယာထုတ်လလဟင့်သူသည် ကလင်သဆက်အတလင်သရဟိ အနည်သဆုံသ စစ်ထုတ်မဟုတစ်ခု သို့မဟုတ် အထလက်မျာသအာသလုံသ "လေထဲတလင် ချိတ်ထာသသည်" (မချိတ်ဆက်ထာသပါ) တလေ့ရဟိပါက ပျက်သလာသနိုင်သည်။

လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ စစ်ထုတ်မဟုမျာသကို ချိတ်ဆက်ခဌင်သ ပဌီသပါပဌီ။

ms_filter_link(src, src_out, dst, dst_in)

ပထမအငဌင်သအခုံသည် အရင်သအမဌစ်စစ်ထုတ်ရန်အတလက် ညလဟန်ပဌသည့်နေရာတလင်၊ ဒုတိယအငဌင်သအခုံသည် ရင်သမဌစ်အထလက်နံပါတ်ဖဌစ်သည် (အဝင်နဟင့်အထလက်မျာသကို သုညမဟစတင်၍ ရေတလက်ထာသကဌောင်သ သတိပဌုပါ)။ တတိယအငဌင်သအခုံသည် လက်ခံသူစစ်ထုတ်ရန်အတလက် ညလဟန်ပဌချက်ဖဌစ်ပဌီသ စတုတ္ထအချက်မဟာ လက်ခံသူထည့်သလင်သမဟုနံပါတ်ဖဌစ်သည်။

စစ်ထုတ်မဟုမျာသအာသလုံသကို ချိတ်ဆက်ထာသပဌီသ နာရီရင်သမဌစ်ကို နောက်ဆုံသချိတ်ဆက်ထာသပါသည် (ယနေ့နောက်ပိုင်သတလင် ၎င်သကို ရိုသရိုသရဟင်သရဟင်သ လက်မဟတ်တစ်ခုဟု ခေါ်ဆိုပါမည်)။ ထို့နောက်တလင် ကျလန်ုပ်တို့၏ အသံဆာသကစ်မျာသ စတင်အလုပ်လုပ်သော်လည်သ ကလန်ပျူတာစပီကာမျာသတလင် ဘာမျဟမကဌာသနိုင်သေသပါ - အသံဂျင်နရေတာသည် ပိတ်သလာသပဌီသ input data blocks မျာသကို တိတ်ဆိတ်စလာဖဌတ်သန်သသလာသပါသည်။ အသံကို စတင်ဖန်တီသရန်၊ သင်သည် ဂျင်နရေတာ စစ်ထုတ်သည့်နည်သလမ်သကို လုပ်ဆောင်ရန် လိုအပ်သည်။

ဖုန်သပေါ်ရဟိ "1" ခလုတ်ကို နဟိပ်ခဌင်သနဟင့် ကိုက်ညီသော two-tone (DTMF) အချက်ပဌမဟုကို ကျလန်ုပ်တို့ ထုတ်ပေသပါမည်။ ဒါကိုလုပ်ဖို့၊ ကျလန်တော်တို့ function ကိုသုံသတယ်။ ms_filter_call_method() ကျလန်ုပ်တို့သည် MS_DTMF_GEN_PLAY နည်သလမ်သကို ခေါ်ဆိုပဌီသ၊ ၎င်သကို ပဌန်ဖလင့်ခဌင်သ အချက်ပဌမဟုနဟင့် ကိုက်ညီသင့်သည့် ကုဒ်ဆီသို့ ညလဟန်ပဌသည့် ညလဟန်ပဌချက်တစ်ခုအဖဌစ် ၎င်သကို ဖဌတ်သန်သသည်။

ကျန်တာအာသလုံသက program ကို compile လုပ်ဖို့ပါ။

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

ပဌေသပါ

$ ./mstest2

ပရိုဂရမ်ကို စတင်ပဌီသနောက်၊ ကလန်ပဌူတာစပီကာတလင် အသံနဟစ်သံပါသည့် တိုတောင်သသော အသံအချက်ပဌသံကို သင်ကဌာသရပါမည်။

ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ ပထမဆုံသ အသံပတ်လမ်သကို တည်ဆောက်ပဌီသ စတင်ခဲ့သည်။ စစ်ထုတ်သည့်အရာမျာသကို ဖန်တီသနည်သ၊ ၎င်သတို့ကို ချိတ်ဆက်နည်သနဟင့် ၎င်သတို့၏နည်သလမ်သမျာသကို မည်သို့ခေါ်ဆိုရမည်ကို ကျလန်ုပ်တို့ မဌင်တလေ့ခဲ့ရသည်။ ကျလန်ုပ်တို့၏ ကနညသအောင်မဌင်မဟုကို ကျလန်ုပ်တို့ ကျေနပ်နေသော်လည်သ၊ ကျလန်ုပ်တို့၏ ပရိုဂရမ်မဟ ထလက်မသလာသမီ ခလဲဝေသတ်မဟတ်ထာသသော မဟတ်ဉာဏ်ကို မလလတ်စေသည့်အချက်ကို အာရုံစိုက်ရန် လိုအပ်ပါသည်။ နောက်၌ ဆောင်သပါသ ကျလန်ုပ်တို့သည် မိမိကိုယ်ကို သန့်စင်ရန် သင်ယူပါမည်။

source: www.habr.com

မဟတ်ချက် Add