Ho hlahloba enjene ea Mediastreamer2 VoIP. Karolo ea 4

Thepa ea sehlooho e nkiloe ho ea ka mocha oa zen.

Ho theha mitha ea boemo ba lets'oao

Qetellong sehlooho Re hlakisitse pheliso e nepahetseng ea mananeo a sebelisa media streamer.

Sehloohong sena re tla bokella potoloho ea mitha ea boemo ba matšoao 'me re ithute ho bala sephetho sa tekanyo ho tsoa ho sefa. Ha re hlahlobeng ho nepahala ha tekanyo.

Sehlopha sa li-filters se fanoeng ke media streamer se kenyelletsa sefe, MS_VOLUME, se khonang ho lekanya boemo ba RMS ba pontšo e fetang ho eona, ho fokotsa letšoao le ho etsa mesebetsi e mengata ea bohlokoa le e sa lebelloang. Re tla fana ka sengoloa kaofela sefeng sena hamorao. Empa hajoale re tla e sebelisa joalo ka metara.

Re tla sebelisa jenereithara ea molumo e le mohloli oa lets'oao, lets'oao le tla romelloa ho filthara ea MS_VOLUME, ho tlhahiso eo karete ea molumo e hokahaneng.

Mohlaleng ona, re tla sebelisa filthara ea jenereithara ka mokhoa o fapaneng hanyane - o tla hlahisa lets'oao la molumo o le mong bakeng sa rona, i.e. lesupa le nang le ho sisinyeha ha sinusoidal e le 'ngoe feela.

Ntle le maqhubu le amplitude, re tla hloka ho beha nako eo lets'oao le tla hlahisoa ka eona; e tlameha ho lekana hore lisampole tse lekaneng li fete sefileng sa MS_VOLUME bakeng sa tekanyo. Ho fetisetsa litlhophiso ho jenereithara, ho sebelisoa sebopeho sa 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;

Ho qala jenereithara, re tla sebelisa mokhoa oa eona oa MS_DTMF_GEN_PLAY_CUSTOM.

Setšoantšo sa block ea ts'ebetso ea matšoao:

Ho hlahloba enjene ea Mediastreamer2 VoIP. Karolo ea 4

Khoutu ea lenaneo e sebelisang morero ona e bontšitsoe ka tlase.

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

Re bokella mohlala oa rona, joalo ka ha re ne re etsa pele, re sebelisa feela lebitso la faele mstst3. Ha re e tsamaise 'me re fumane sephetho:

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

Joalo ka ha u bona, sephetho sa tekanyo se tsamaellana le sebaka sa boraro sa desimali se nang le boleng ba thuto e lekanang le "square root" tse peli tse arotsoeng ka halofo: sqr(2)/2=0,7071067811865475.

Phapang e lekanyelitsoeng ea sephetho ho tsoa boleng ba 'nete e ne e le 0.1%. Re hlahlobile phoso ea ho lekanya boemong bo phahameng ba matšoao. Ka lebaka leo, ha boemo bo fokotseha, phoso e lokela ho eketseha. Ke fana ka maikutlo a hore u itlhahlobe bakeng sa maemo a tlase a matšoao.

Sehloohong se latelang re tla bokella potoloho e lemohang ho ba teng ha lets'oao la molumo oa maqhubu a fanoeng ka ho kenya letsoho ho sebelisa mochine oa molumo. Hape re tla ithuta mokhoa oa ho sebetsana le liketsahalo tse hlahisoang ke li-filters.

Source: www.habr.com

Eketsa ka tlhaloso