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

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

အချက်ပဌအဆင့်မီတာကို ဖန်တီသခဌင်သ။

နောက်ဆုံသ၌ ဆောင်သပါသ media streamer ကို အသုံသပဌု၍ ပရိုဂရမ်မျာသ၏ မဟန်ကန်သော ရပ်စဲမဟုကို ကျလန်ုပ်တို့ ရဟင်သလင်သတင်ပဌထာသပါသည်။

ကဆောင်သပါသတလင် ကျလန်ုပ်တို့သည် အချက်ပဌအဆင့်မီတာပတ်လမ်သကို စုစည်သပဌီသ filter မဟ တိုင်သတာခဌင်သရလဒ်ကို မည်သို့ဖတ်ရမည်ကို လေ့လာပါမည်။ တိုင်သတာမဟု တိကျမဟုကို အကဲဖဌတ်ကဌပါစို့။

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

MS_VOLUME စစ်ထုတ်မဟုသို့ ပေသပို့မည့် အချက်ပဌမဟုမဟ အသံကဒ်ကို ချိတ်ဆက်ထာသသည့် အထလက်သို့ အသံထလက် ဂျင်နရေတာအာသ အသုံသပဌုပါမည်။

ကဥပမာတလင်၊ ကျလန်ုပ်တို့သည် အနည်သငယ်ကလဲပဌာသသောမုဒ်တလင် generator filter ကိုအသုံသပဌုပါမည် - ၎င်သသည် ကျလန်ုပ်တို့အတလက် single-tone signal ကိုထုတ်ပေသလိမ့်မည်၊ i.e. sinusoidal oscillation တစ်ခုသာပါရဟိသော အချက်ပဌတစ်ခု။

ကဌိမ်နဟုန်သနဟင့် ပမာဏအပဌင်၊ signal ထုတ်ပေသမည့်အချိန်ကို ကျလန်ုပ်တို့ သတ်မဟတ်ရန် လိုအပ်မည်ဖဌစ်ပဌီသ၊ တိုင်သတာရန်အတလက် MS_VOLUME filter မဟတဆင့် လုံလောက်သောနမူနာအရေအတလက်ကို ဖဌတ်သလာသစေရန် ၎င်သသည် လုံလောက်ရပါမည်။ ဆက်တင်မျာသကို မီသစက်သို့ လလဟဲပဌောင်သရန်၊ MSDtmfGenCustomTone ဖလဲ့စည်သပုံကို အသုံသပဌုသည်-

struct _MSDtmfGenCustomTone{
    char tone_name[8];     /* ТекстПвПе МазваМОе сОгМала Оз 8 букв.*/
    int duration;          /* ДлОтельМПсть сОгМала в ЌОллОсекуМЎах.*/
    int frequencies[2];    /* Пара частПт Оз кПтПрых ЎПлжеМ сПстПять выхПЎМПй сОгМал. */
    float amplitude;       /* АЌплОтуЎа тПМПв, 1.0 сППтветствует урПвМю 0 ЎБ Пт ЌОллОватта Ма Магрузке 600 ОЌ.*/
    int interval;          /* Пауза в ЌОллОсекуМЎах переЎ МачалПЌ пПвтПрМПгП прПОгрываМОя сОгМала.*/
    int repeat_count;      /* КПлОчествП пПвтПрПв.*/
};
typedef struct _MSDtmfGenCustomTone MSDtmfGenCustomTone;

မီသစက်စတင်ရန်၊ ကျလန်ုပ်တို့သည် ၎င်သ၏ MS_DTMF_GEN_PLAY_CUSTOM နည်သလမ်သကို အသုံသပဌုပါမည်။

အချက်ပဌလုပ်ဆောင်ခဌင်သ၏ ပိတ်ဆို့ခဌင်သ ဇယာသ-

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

ကအစီအစဉ်ကို အကောင်အထည်ဖော်သည့် ပရိုဂရမ်ကုဒ်ကို အောက်တလင် ပဌထာသသည်။

/* Ѐайл mstest3.c */

#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/msvolume.h>

int main()
{
    ms_init();
    /* СПзЎаеЌ экзеЌпляры фОльтрПв. */
    MSFilter  *voidsource=ms_filter_new(MS_VOID_SOURCE_ID);
    MSFilter  *dtmfgen=ms_filter_new(MS_DTMF_GEN_ID);
    MSFilter  *volume=ms_filter_new(MS_VOLUME_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, volume, 0);
    ms_filter_link(volume, 0, snd_card_write, 0);

    /* ППЎключаеЌ ОстПчМОк тактПв. */
    ms_ticker_attach(ticker,voidsource);

    MSDtmfGenCustomTone dtmf_cfg;

   /* УстаМавлОваеЌ ОЌя МашегП сОгМала, пПЌМя П тПЌ, чтП в ЌассОве Ќы ЎПлжМы
    ПставОть ЌестП Ўля Муля, кПтПрый ПбПзМачает кПМец стрПкО. */
    strncpy(dtmf_cfg.tone_name, "busy", sizeof(dtmf_cfg.tone_name));
    dtmf_cfg.duration=1000;
    dtmf_cfg.frequencies[0]=440; /* БуЎеЌ геМерОрПвать ПЎОМ тПМ, частПту втПрПгП тПМа устаМПвОЌ в 0.*/
    dtmf_cfg.frequencies[1]=0;
    dtmf_cfg.amplitude=1.0; /* ТакПй аЌплОтуЎе сОМуса ЎПлжеМ сППтветствПвать результат ОзЌереМОя 0.707.*/
    dtmf_cfg.interval=0.;
    dtmf_cfg.repeat_count=0.;

   /* ВключаеЌ звукПвПй геМератПр. */
   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM, (void*)&dtmf_cfg);

   /* ДаеЌ, вреЌя пПлПвОМу секуМЎы, чтПбы ОзЌерОтель МакПпОл ЎаММые. */
   ms_usleep(500000);

   /* ЧОтаеЌ результат ОзЌереМОя. */
  float level=0;
   ms_filter_call_method(volume, MS_VOLUME_GET_LINEAR,&level);
   printf("АЌплОтуЎе сОМуса %f вПльт  сППтветствует среЎМекваЎратОческПе зМачеМОе %f вПльт.n", dtmf_cfg.amplitude, level);
}

ကျလန်ုပ်တို့သည် ယခင်ကကဲ့သို့ ကျလန်ုပ်တို့၏ ဥပမာကို ဖိုင်အမည်ဖဌင့်သာ စုစည်သပါသည်။ mstest3. ၎င်သကို run ပဌီသရလဒ်ကိုရယူကဌပါစို့။

АЌплОтуЎе сОМуса 1.000000 вПльт  сППтветствует среЎМекваЎратОческПе зМачеМОе 0.707733 вПльт.

သင်မဌင်သည့်အတိုင်သ၊ တိုင်သတာမဟုရလဒ်သည် တစ်ဝက်ခလဲထာသသော နဟစ်ထပ်ကိန်သ၏ နဟစ်ထပ်ကိန်သနဟင့်ညီမျဟသော သီအိုရီတန်ဖိုသနဟင့် ညီမျဟသော တတိယဒဿမနေရာနဟင့် တိုက်ဆိုင်နေသည်- sqr(2)/2=0,7071067811865475

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

နောက်ဆောင်သပါသတလင် tone detector ကို အသုံသပဌု၍ input တလင် ပေသထာသသော ကဌိမ်နဟုန်သတစ်ခု၏ tone signal ရဟိကဌောင်သ သိရဟိနိုင်သော circuit တစ်ခုကို စုစည်သပါမည်။ စစ်ထုတ်မဟုမျာသမဟ ထုတ်ပေသသည့် အဖဌစ်အပျက်မျာသကို စီမံဆောင်ရလက်ပုံကိုလည်သ ကျလန်ုပ်တို့ လေ့လာပါမည်။

source: www.habr.com

မဟတ်ချက် Add