ื—ืงืจ ืžื ื•ืข ื”-VoIP Mediastreamer2. ื—ืœืง 4

ื”ื—ื•ืžืจ ืฉืœ ื”ืžืืžืจ ืœืงื•ื— ืžืžื ื™ ืขืจื•ืฅ ื–ืŸ.

ื™ืฆื™ืจืช ืžื“ ืจืžืช ืื•ืช

ื‘ืขื‘ืจ ัั‚ะฐั‚ัŒะต ื”ื‘ื”ืจื ื• ืืช ื”ืกื™ื•ื ื”ื ื›ื•ืŸ ืฉืœ ืชื•ื›ื ื™ื•ืช ื‘ืืžืฆืขื•ืช ืกื˜ืจื™ืžืจ ื”ืžื“ื™ื”.

ื‘ืžืืžืจ ื–ื” ื ืจื›ื™ื‘ ืžืขื’ืœ ืžื“ ืจืžืช ืื•ืช ื•ื ืœืžื“ ื›ื™ืฆื“ ืœืงืจื•ื ืืช ืชื•ืฆืืช ื”ืžื“ื™ื“ื” ืžื”ืคื™ืœื˜ืจ. ื‘ื•ืื• ื ืขืจื™ืš ืืช ื“ื™ื•ืง ื”ืžื“ื™ื“ื”.

ืกื˜ ื”ืžืกื ื ื™ื ืฉืžืกืคืง ืกื˜ืจื™ืžืจ ื”ืžื“ื™ื” ื›ื•ืœืœ ืคื™ืœื˜ืจ, MS_VOLUME, ื”ืžืกื•ื’ืœ ืœืžื“ื•ื“ ืืช ืจืžืช ื”-RMS ืฉืœ ื”ืื•ืช ื”ืขื•ื‘ืจ ื“ืจื›ื•, ืœื”ื—ืœื™ืฉ ืืช ื”ืื•ืช ื•ืœื‘ืฆืข ื”ืจื‘ื” ืคื•ื ืงืฆื™ื•ืช ืฉื™ืžื•ืฉื™ื•ืช ื•ื‘ืœืชื™ ืฆืคื•ื™ื•ืช. ืœืคื™ืœื˜ืจ ื–ื” ื ืงื“ื™ืฉ ืžืืžืจ ืฉืœื ื‘ื”ืžืฉืš. ืื‘ืœ ืœืขืช ืขืชื” ื ืฉืชืžืฉ ื‘ื• ื›ืžื“.

ื ืฉืชืžืฉ ื‘ืžื—ื•ืœืœ ืฆืœื™ืœื™ื ื›ืžืงื•ืจ ืื•ืช, ืฉื”ืื•ืช ืžืžื ื• ื™ื™ืฉืœื— ืœืžืกื ืŸ MS_VOLUME, ืฉืืœื™ื• ืžื—ื•ื‘ืจ ื›ืจื˜ื™ืก ื”ืงื•ืœ.

ื‘ื“ื•ื’ืžื” ื–ื•, ื ืฉืชืžืฉ ื‘ืคื™ืœื˜ืจ ื”ืžื—ื•ืœืœ ื‘ืžืฆื‘ ืžืขื˜ ืฉื•ื ื” - ื”ื•ื ื™ืคื™ืง ืขื‘ื•ืจื ื• ืื•ืช ื—ื“-ื’ื•ื•ื ื™, ื›ืœื•ืžืจ. ืื•ืช ื”ืžื›ื™ืœ ืจืง ืชื ื•ื“ื” ืกื™ื ื•ืกื•ืื™ื“ืœื™ืช ืื—ืช.

ื‘ื ื•ืกืฃ ืœืชื“ืจ ื•ืœืžืฉืจืขืช, ื ืฆื˜ืจืš ืœื”ื’ื“ื™ืจ ืืช ื”ื–ืžืŸ ืฉื‘ืžื”ืœื›ื• ื”ืื•ืช ื™ื•ื•ืฆืจ, ื–ื” ื—ื™ื™ื‘ ืœื”ืกืคื™ืง ื›ื“ื™ ืฉืžืกืคืจ ืžืกืคื™ืง ืฉืœ ื“ื’ื™ืžื•ืช ื™ืขื‘ื•ืจ ื‘ืžืกื ืŸ MS_VOLUME ืœืžื“ื™ื“ื”. ื›ื“ื™ ืœื”ืขื‘ื™ืจ ื”ื’ื“ืจื•ืช ืœืžื—ื•ืœืœ, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืžื‘ื ื” 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 ืฉืœื•.

ื“ื™ืื’ืจืžืช ื‘ืœื•ืงื™ื ืฉืœ ืขื™ื‘ื•ื“ ืื•ืชื•ืช:

ื—ืงืจ ืžื ื•ืข ื”-VoIP Mediastreamer2. ื—ืœืง 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. ื‘ื•ื ื ืจื™ืฅ ืืช ื–ื” ื•ื ืงื‘ืœ ืืช ื”ืชื•ืฆืื”:

ะะผะฟะปะธั‚ัƒะดะต ัะธะฝัƒัะฐ 1.000000 ะฒะพะปัŒั‚  ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ัั€ะตะดะฝะตะบะฒะฐะดั€ะฐั‚ะธั‡ะตัะบะพะต ะทะฝะฐั‡ะตะฝะธะต 0.707733 ะฒะพะปัŒั‚.

ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช, ืชื•ืฆืืช ื”ืžื“ื™ื“ื” ื”ืœื›ื” ื‘ืงื ื” ืื—ื“ ืขื ื”ืžืงื•ื ื”ืขืฉืจื•ื ื™ ื”ืฉืœื™ืฉื™ ืขื ื”ืขืจืš ื”ืชื™ืื•ืจื˜ื™ ื”ืฉื•ื•ื” ืœืฉื•ืจืฉ ืฉืœ ืฉื ื™ื™ื ืžื—ื•ืœืง ืœืฉื ื™ื™ื: sqr(2)/2=0,7071067811865475

ื”ืกื˜ื™ื™ื” ื”ื™ื—ืกื™ืช ืฉืœ ื”ืชื•ืฆืื” ืžื”ืขืจืš ื”ืืžื™ืชื™ ื”ื™ื™ืชื” 0.1%. ื”ืขืจื›ื ื• ืืช ืฉื’ื™ืืช ื”ืžื“ื™ื“ื” ื‘ืจืžืช ื”ืื•ืช ื”ืžืงืกื™ืžืœื™ืช. ื‘ื”ืชืื ืœื›ืš, ื›ื›ืœ ืฉื”ืจืžื” ื™ื•ืจื“ืช, ื”ืฉื’ื™ืื” ืฆืจื™ื›ื” ืœื’ื“ื•ืœ. ืื ื™ ืžืฆื™ืข ืœืš ืœื”ืขืจื™ืš ืืช ื–ื” ื‘ืขืฆืžืš ืขื‘ื•ืจ ืจืžื•ืช ืื•ืช ื ืžื•ื›ื•ืช.

ื‘ืžืืžืจ ื”ื‘ื ื ืจื›ื™ื‘ ืžืขื’ืœ ืฉืžื–ื”ื” ื ื•ื›ื—ื•ืช ืฉืœ ืื•ืช ื˜ื•ืŸ ื‘ืชื“ืจ ื ืชื•ืŸ ื‘ื›ื ื™ืกื” ื‘ืืžืฆืขื•ืช ื’ืœืื™ ื˜ื•ืŸ. ื ืœืžื“ ื’ื ื›ื™ืฆื“ ืœืขื‘ื“ ืื™ืจื•ืขื™ื ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ ืžืกื ื ื™ื.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”