Π˜ΡΡ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ ΠœΠ΅Π΄ΠΈΠ°ΡΡ‚Ρ€Π΅Π°ΠΌΠ΅Ρ€2 Π’ΠΎΠ˜ΠŸ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Π”Π΅ΠΎ 5

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π» Ρ‡Π»Π°Π½ΠΊΠ° јС ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ са ΠΌΠΎΠ³ Π·Π΅Π½ ΠΊΠ°Π½Π°Π».

Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Ρ‚ΠΎΠ½Π°

Π£ ΠΏΠΎΡΠ»Π΅Π΄ΡšΠΈΡ… Π§Π»Π°Π½Π°ΠΊ Направили смо ΠΌΠ΅Ρ€Π°Ρ‡ Π½ΠΈΠ²ΠΎΠ° сигнала. Π£ ΠΎΠ²ΠΎΠΌ Ρ›Π΅ΠΌΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΡƒΡ˜Π΅ΠΌΠΎ тонски сигнал.

Π˜ΡΡ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ΅ ΠœΠ΅Π΄ΠΈΠ°ΡΡ‚Ρ€Π΅Π°ΠΌΠ΅Ρ€2 Π’ΠΎΠ˜ΠŸ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°. Π”Π΅ΠΎ 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 ΠΎΠ²ΠΈΡ… структура, Ρ‚Π°ΠΊΠΎ Π΄Π° сС јСдан Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅ конфигурисати Π΄Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΡƒΡ˜Π΅ дСсСт двотонских сигнала. Али користићСмо само ΡˆΠ΅ΡΡ‚ Ρ˜Π΅Π΄Π½ΠΎΡ‚ΠΎΠ½ΡΠΊΠΈΡ… сигнала. Π—Π° прСнос подСшавања Π½Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ користи сС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° МБ_Π’ΠžΠΠ•_Π”Π•Π’Π•Π¦Π’ΠžΠ _АДД_БЦАН.

Π”Π° Π±ΠΈ нас Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ обавСстио Π΄Π° јС Π½Π° њСгов ΡƒΠ»Π°Π· стигао сигнал са ΠΆΠ΅Ρ™Π΅Π½ΠΈΠΌ Ρ„Ρ€Π΅ΠΊΠ²Π΅Π½Ρ‚Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠ°, ΠΌΠΎΡ€Π°ΠΌΠΎ ΠΌΡƒ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚ΠΈ Ρ†Π°Π»Π»Π±Π°Ρ†ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Ρƒ ΠΊΠΎΡ˜Ρƒ Ρ›Π΅ Ρƒ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ. Ово сС Ρ€Π°Π΄ΠΈ ΠΏΠΎΠΌΠΎΡ›Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅ мс_Ρ„ΠΈΠ»Ρ‚Π΅Ρ€_сСт_Π½ΠΎΡ‚ΠΈΡ„ΠΈ_Ρ†Π°Π»Π»Π±Π°Ρ†ΠΊ(). Као Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΏΡ€ΠΈΠΌΠ° ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ‡ Π½Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€, ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ‡ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Ρƒ ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° ΠΈ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ‡ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅ којС ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° прослСдимо Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜ΠΈ ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° (кориснички ΠΏΠΎΠ΄Π°Ρ†ΠΈ).

Када сС Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° Ρ›Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈ корисничкС ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅, ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ‡ Π½Π° Ρ„ΠΈΠ»Ρ‚Π΅Ρ€ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ³Π°Ρ’Π°Ρ˜Π° ΠΈ структуру која ΠΎΠΏΠΈΡΡƒΡ˜Π΅ Π΄ΠΎΠ³Π°Ρ’Π°Ρ˜:


/** * 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("                      ΠŸΡ€ΠΈΠ½ΡΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: %sn", 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("ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: %cn", 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
$

Π’ΠΈΠ΄ΠΈΠΌΠΎ Π΄Π° су ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈ Ρ‚ΠΎΠ½ΠΎΠ²ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ послати ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΡ… Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΡƒΡ˜Π΅.

Π£ слСдСћСм Ρ‡Π»Π°Π½ΠΊΡƒ Ρ›Π΅ΠΌΠΎ сС ΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ прСносу Π°ΡƒΠ΄ΠΈΠΎ сигнала ΠΏΡ€Π΅ΠΊΠΎ Π•Ρ‚Ρ…Π΅Ρ€Π½Π΅Ρ‚ ΠΌΡ€Π΅ΠΆΠ΅ користСћи РВП ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈ ΠΎΠ΄ΠΌΠ°Ρ… Π³Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΠΈ Ρƒ нашСм даљинском ΡƒΠΏΡ€Π°Π²Ρ™Π°Ρ‡Ρƒ.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

ΠšΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎΡƒΠ·Π΄Π°Π½ хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²Π΅ са Π”Π”ΠΎΠ‘ Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΎΠΌ, Π’ΠŸΠ‘ Π’Π”Π‘ сСрвСрС πŸ”₯ ΠšΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎΡƒΠ·Π΄Π°Π½ Π²Π΅Π± хостинг са DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΎΠΌ, VPS VDS сСрвСрС | ProHoster