рд╣рдо Mediastreamer2 рд╡реАрдУрдЖрдИрдкреА рдЗрдВрдЬрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ 5

рдореЗрд░реЗ рдЬрд╝реЗрди рдЪреИрдирд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд▓реЗрдЦ рд╕рд╛рдордЧреНрд░реА ред



рдЯреЛрди рдбрд┐рдЯреЗрдХреНрдЯрд░


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╕реНрддрд░ рдореАрдЯрд░ рдмрдирд╛рдпрд╛ рдерд╛ред рдЗрд╕рдореЗрдВ рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЯреЛрди рдХрд╛ рдкрддрд╛ рдХреИрд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдкрд╛рд╕ рдЯреАрд╡реА рдирд╣реАрдВ рдерд╛, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЖрдзреЗ рдиреЗ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рд░реМрддрд╛ рдХреЗ рд╕рд╣рд╛рд░реЗ рдЪреИрдирд▓реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд╡рд┐рджреЗрд╢реА рддрдХрдиреАрдХреА рдкреНрд░реЗрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдЦрдмрд░ рдереА рдХрд┐ рдЯреАрд╡реА рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЕрдкрдиреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╡рд╛рдпрд░рд▓реЗрд╕ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ рд▓реИрд╕ рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рдпрд╣ рдЬреНрдЮрд╛рдд рдерд╛ рдХрд┐ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдмреИрдЯрд░реА рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд░рд┐рдореЛрдЯ рдпрд╛рдВрддреНрд░рд┐рдХ рдерд╛ рдФрд░ рдПрдХ рд╕рдВрдЧреАрдд рд╡рд╛рджреНрдпрдпрдВрддреНрд░ рдХрд╛ рдПрдХ рд╕рдВрдХрд░ рдерд╛ - рдПрдХ рдореЗрдЯрд╛рд▓реЛрдлреЛрди рдФрд░ рдПрдХ рд░рд┐рд╡реЙрд▓реНрд╡рд░ред рд░рд┐рд╡рд╛рд▓реНрд╡рд░ рдХреЗ рдбреНрд░рдо рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдВрдмрд╛рдИ рдХреЗ рдзрд╛рддреБ рдХреЗ рд╕рд┐рд▓реЗрдВрдбрд░ рдереЗ, рдФрд░ рдЬрдм рд╕реНрдЯреНрд░рд╛рдЗрдХрд░ рдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдорд╛рд░рд╛, рддреЛ рд╕рд┐рд▓реЗрдВрдбрд░ рдЕрдкрдиреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдмрдЬрдирд╛ рд╢реБрд░реВ рд╣реБрдЖред рд╕рдВрднрд╡рддрдГ рдЕрд▓реНрдЯреНрд░рд╛рд╕рд╛рдЙрдВрдб рдореЗрдВред рдЯреАрд╡реА рдореЗрдВ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдиреЗ рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕реБрдирд╛ рдФрд░ рдЗрд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА, рдЗрд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд┐рдпрд╛ - рдЪреИрдирд▓ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ, рд╡реЙрд▓реНрдпреВрдо рдмрджрд▓реЗрдВ,рдЯреАрд╡реА рдмрдВрдж рдХрд░реЛред


, .


, . , . , 6 , / , , / . :


struct _MSToneDetectorDef{  
     char tone_name[8];     
     int frequency; /**<Expected frequency of the tone*/ 
     int min_duration; /**<Min duration of the tone in milliseconds */ 
     float min_amplitude; /**<Minimum amplitude of the tone, 1.0 corresponding to the normalized 0dbm level */
};

typedef struct _MSToneDetectorDef MSToneDetectorDef;

10 , . . MS_TONE_DETECTOR_ADD_SCAN.


, , , . ms_filter_set_notify_callback(). , , , ( ).


, , , :



/** * Structure carried as argument of the MS_TONE_DETECTOR_EVENT**/
struct _MSToneDetectorEvent{ 
      char tone_name[8];       /*         . */
      uint64_t tone_start_time;   /*   ,    . */
};

typedef struct _MSToneDetectorEvent MSToneDetectorEvent;

.


.


/*  mstest4.c     . */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/msvolume.h>
#include <mediastreamer2/mstonedetector.h>

/*       
 * . */
#include <mediastreamer2/mseventqueue.h>

/*   ,    ,   
 *       . */
static void tone_detected_cb(void *data, MSFilter *f, unsigned int event_id,
        MSToneDetectorEvent *ev)
{
    printf("                       : %s\n", ev->tone_name);
}

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);
    MSFilter  *detector = ms_filter_new(MS_TONE_DETECTOR_ID);

    /*      ,  
     *    .*/
    ms_filter_call_method(detector, MS_TONE_DETECTOR_CLEAR_SCANS, 0);

    /*    - . */
    MSTicker *ticker=ms_ticker_new();

    /*    . */
    ms_filter_link(voidsource, 0, dtmfgen, 0);
    ms_filter_link(dtmfgen, 0, volume, 0);
    ms_filter_link(volume, 0, detector, 0);
    ms_filter_link(detector, 0, snd_card_write, 0);

    /*      . */
    ms_filter_set_notify_callback(detector,
            (MSFilterNotifyFunc)tone_detected_cb, NULL);

    /*   . */
    ms_ticker_attach(ticker,voidsource);

    /*  ,     
     *   ,   :  
     *  ,   ,   ,
     *    0,775. */  
    MSToneDetectorDef  scan[6]=
    {
        {"V+",  440, 100, 0.1}, /*  " ". */
        {"V-",  540, 100, 0.1}, /*  " ". */
        {"C+",  640, 100, 0.1}, /*  "  ". */
        {"C-",  740, 100, 0.1}, /*  "  ". */
        {"ON",  840, 100, 0.1}, /*  " ". */
        {"OFF", 940, 100, 0.1}  /*  " ". */
    };

    /*      . */
    int i;
    for (i = 0; i < 6; i++)
    {
        ms_filter_call_method(detector, MS_TONE_DETECTOR_ADD_SCAN,
                &scan[i]);
    }

    /*  ,    .*/
    MSDtmfGenCustomTone dtmf_cfg;
    dtmf_cfg.tone_name[0] = 0;
    dtmf_cfg.duration = 1000;
    dtmf_cfg.frequencies[0] = 440;
    /*    ,      0.*/
    dtmf_cfg.frequencies[1] = 0;
    dtmf_cfg.amplitude = 1.0;
    dtmf_cfg.interval = 0.;
    dtmf_cfg.repeat_count = 0.;

    /*     .   
     *    . */
    char key='9';
    printf("  ,  .\n"
        "    0.\n");
    while(key != '0')
    {
        key = getchar();
        if ((key >= 49) && (key <= 54))
        {
                printf(" : %c\n", key);
            /*      
             *   .*/
            dtmf_cfg.frequencies[0] = 440 + 100*(key-49);

            /*    c  . */
            ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM,
                    (void*)&dtmf_cfg);
        }
        ms_usleep(20000);
    }
}

рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:


$ ./mstest4
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Invalid CTL default:0
ortp-warning-Could not attach mixer to card: Invalid argument
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ortp-warning-Strange, sound card Intel 82801AA-ICH does not seems to be capable of anything, retrying with plughw...
  ,  .
    0.
ortp-warning-alsa_set_params: periodsize:256 Using 256
ortp-warning-alsa_set_params: period:8 Using 8

"1" рд╕реЗ "6" рддрдХ рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рдПрдВ, "рдПрдВрдЯрд░" рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдЗрд╕ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреА рддрд░рд╣ рдХреБрдЫ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:



2
 : 2
                       : V-
1
 : 1
                       : V+
3
 : 3
                       : C+
4
 : 4
                       : C-
0
$

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдорд╛рдВрдб рдЯреЛрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред


рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо RTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдИрдерд░рдиреЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдзреНрд╡рдирд┐ рд╕рдВрдХреЗрдд рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдУрд░ рдореБрдбрд╝реЗрдВрдЧреЗ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред


All Articles