Sahaminta mashiinka Mediastreamer2 VoIP. Qaybta 4

Nuxurka maqaalku waxa aan ka soo qaatay kanaalka zen.

Abuuritaanka mitirka heerka signalka

Waagii hore maqaal Waxaan cadeynay joojinta saxda ah ee barnaamijyada anagoo adeegsanayna streamer media.

Maqaalkan waxaan ku soo ururin doonaa wareegga mitirka heerka signalka waxaanan baran doonaa sida loo akhriyo natiijada cabbirka shaandhada. Aynu qiimayno saxnaanta cabbirka.

Qaybta filtarrada ee ay bixiso warbaahintu waxa ka mid ah shaandhada, MS_VOLUME, kaas oo awood u leh in uu cabbiro heerka RMS ee calaamadda dhex marta, yaraynta calaamadda iyo qabashada hawlo badan oo faa'iido leh oo lama filaan ah. Maqaal dhan ayaanu shaandhayntan u dayn doonaa hadhow. Laakiin hadda waxaan u isticmaali doonaa mitir ahaan.

Waxaan u isticmaali doonaa koronto dhaliyaha isha ishaarada, calaamada laga soo dirayo shaandhada MS_VOLUME, oo soo saarida kaadhka dhawaaqu ku xidhan yahay.

Tusaalahan, waxaan u isticmaali doonaa shaandhada koronto-dhaliyaha qaab wax yar ka duwan - waxay noo dhalin doontaa calaamad hal-tone ah, i.e. calaamad ka kooban hal oscillation sinusoidal.

Marka lagu daro soo noqnoqoshada iyo baaxadda, waxaan u baahan doonaa inaan dejino waqtiga calaamaduhu soo baxayaan; waa inay ahaataa mid ku filan si tiro ku filan oo muunado ah ay u dhex maraan shaandhada MS_VOLUME ee cabbirka. Si loogu wareejiyo goobaha koronto dhaliyaha, qaab dhismeedka MSDtmfGenCustomTone ayaa la isticmaalaa:

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;

Si loo bilaabo koronto-dhaliyaha, waxaan isticmaali doonaa qaabkeeda MS_DTMF_GEN_PLAY_CUSTOM.

Xiritaanka jaantuska habaynta calaamadaha:

Sahaminta mashiinka Mediastreamer2 VoIP. Qaybta 4

Xeerka barnaamijka ee nidaamkan fulinaya ayaa hoos lagu muujiyay.

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

Waxaan soo aruurineynaa tusaalaheena, sidii aan horey u sameynay, annagoo isticmaalna kaliya magaca faylka mstest3. Aan socodsiino oo aan helno natiijada:

Амплитуде синуса 1.000000 вольт  соответствует среднеквадратическое значение 0.707733 вольт.

Sida aad arki karto, natiijadii cabbirku waxa ay ku beegantay tobanlaha saddexaad iyada oo qiyamka aragtida la mid ah xidid laba jibaaran ee laba loo qaybiyey kala badh: sqr(2)/2=0,7071067811865475

Isbeddelka qaraabada ah ee natiijada ka timid qiimaha dhabta ah wuxuu ahaa 0.1%. Waxaan ku qiimeynay qaladka cabbirka heerka ugu sarreeya. Sidaa darteed, marka heerku hoos u dhaco, khaladku waa inuu kordhiyaa. Waxaan kugula talinayaa inaad adigu qiimeyso heerarka calaamadaha hooseeya.

Maqaalka soo socda waxaan ku soo ururin doonaa wareeg ah oo ogaanaya joogitaanka calaamadda dhawaaqa ee inta jeer ee la soo galiyay iyada oo la adeegsanayo qalabka dhawaaqa. Waxaan sidoo kale baran doonaa sida loo habeeyo dhacdooyinka ay abuuraan filtarrada.

Source: www.habr.com

Add a comment