áá±á¬ááºážáá«ážá á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá»áœááºá¯ááºáá¶á០áá°áá«áááºá
Tone Generator áá áºáá¯ááᯠáááºáá®ážááŒááºážá
ááááºáá¯ááºážá
ááá±á·áá»áœááºá¯ááºááá¯á·ááẠsound card ááœáẠtone signal ááá¯áá¯ááºáá±ážááá¯ááºáá±á¬ application áá áºáá¯ááá¯áááºáá®ážáá«áááºá á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážááẠáá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá±á¬áºááŒáá« á¡áá¶áá»ááºááá±áá¬áááºáááºážááá¯á· á á áºáá¯ááºááŸá¯áá»á¬ážááᯠáá»áááºáááºááẠááá¯á¡ááºáááº-
áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ááŒááºážááᯠáááºááŸáá¬ááá¯á·áááºáááºá á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááá±áá¬á á®ážáááºážááŸá¯áááºážááŒá±á¬ááºážááŒá áºáááºá ááŒáŸá¬ážááœá±ááááºáž áá«ááá¯ááœáŸááºááŒáááºá áá±á¬áá·áºááŸááºá áá¯áá¶áá»á¬ážááẠáá±áá¬ááá±á¬ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá®áž ááááºááᯠáá¯ááºáá±ážááá·áº á á áºáá¯ááºááŸá¯áá»á¬ážááᯠááœáŸááºááŒáááºá áá±á¬áá·áºááŸááºá áá¯áá¶á¡ááœááºážááœáẠáááºážáá¡áááºážááá¹áááᯠááœáŸááºááŒáá¬ážááŒá®áž á á áºáá¯ááºááŸá¯á¡áá»áá¯ážá¡á á¬ážááᯠá¡á±á¬ááºááœáẠá á¬áá¯á¶ážááŒá®ážáá»á¬ážááŒáá·áº ááœáŸááºááŒáá¬ážáááºá áá±á¬áá·áºááŸááºá áá¯áá¶áá»á¬ážááᯠáá»áááºáááºáá¬ážáá±á¬ ááŒáŸá¬ážáá»á¬ážááẠfilter á០filter ááá¯á· data blocks áá»á¬ážááᯠáá±ážááá¯á·ááá·áº data áááºážá á®áá»á¬ážááŒá áºáááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá á á áºáá¯ááºááŸá¯áá áºáá¯ááœáẠááœááºážá¡á¬ážá á¯áá»á¬ážááŸáá·áº á¡ááœááºáá»á¬ážá áœá¬ áá«áááºááá¯ááºáááºá
áááºážááẠfilters áá»á¬ážááœáẠdata áá»á¬ážááá¯ááœááºáá»ááºááá·áº tempo ááá¯áááºááŸááºáá±ážááá·áºáá¬áá®áááºážááŒá áºááŸáá·áºá áááºáááºá áááºážááá¬áá®á ááºáááºážá¡áá á á áºáá¯ááºááŸá¯áá áºáá¯á á®ááẠáááºážáááá·áºááœááºážááŸá¯ááœááºáá«ááŸááá±á¬ áá±áá¬ááá±á¬ááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáááºá ááááºááœááºá¡á±á¬áẠáá¯á¶ážáá»á¬ážááᯠáááºážá á®á á±áá«áááºá áŠážá áœá¬á áá¬áá®áááºážááŒá áºááŸáá·áºá¡áá®ážáá¯á¶áž filter ááẠááœááºáá»ááºááŸá¯áá»á¬ážáá¯ááºáá±á¬ááºááŒá®ážáá±á¬áẠáááºážáá¡ááœááºáá»á¬ážááŸáá·áºáá»áááºáááºáá¬ážáá±á¬ filter áá»á¬áž (á¡ááœááºáá»á¬ážá áœá¬ááŸáááá¯ááºáááº) á áááºááá¯á·ááŒá áºáááºá ááœááºážáááºá¡ááœááºážááŸá áá±á¬ááºáá¯á¶ážá á áºáá¯ááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááŒááºážááŒá®ážáá¯á¶ážááŒá®ážáá±á¬ááºá áá¬áá®á¡áá áºáá áºáá¯áá±á¬ááºáá¬áááºá¡áá áá¯ááºáá±á¬ááºááŸá¯ááᯠáááºááœá¬ážáá«áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áº Beats ááẠ10 áá®áá®á áá¹ááá·áºááŒá¬ážáá¬áááᯠááá¯ááºáá¬áááºá
áá»áœááºá¯ááºááá¯á·á áá¯á¶ááŒááºážááá¯á· ááŒááºááœá¬ážááŒáá«á áá¯á·á áá¬áá®á ááºáááºážáá»á¬ážááẠá¡áá¶ááááºá¡áááºážá¡ááŒá áºáááá·áºááœááºážááŸá¯ááá¯á·áá±á¬ááºááŸááá¬áááºá áááºážááẠáá¬áá®áááºáááºááŸá¯áá áºáá¯á á®á¡ááœáẠáááºážáá¡ááœááºááœáẠáá¯ááá«áááºááá·áºáá±áá¬ááá±á¬ááºáá áºáá¯ááá¯áá¯ááºáá±ážááẠá¡áá¯ááºááŸá¯ááºáá±ááá·áº filter áá áºáá¯ááŒá áºáááºá á€ááá±á¬ááºááᯠá¡áá¶ááá°áá¬áá¯á¶ážáá áºáá¯á¡ááŒá Ạáá»áœááºá¯ááºááá¯á·áá°ááá«áá áááºážááẠááááºááááºááŒááºážááẠáááá¯áá«á ááááá áºáá»ááºááœááºá ááááºááááºá áœá¬ááŒáá·áº áá±áá¬ááá±á¬ááºáá»á¬ážááᯠáá¯ááºáá¯ááºááẠáá°ážáááºážáá¯á¶áááẠ- ááŒá®ážáá±á¬ááºá áááºážááẠáááŒá¬ážááá±á¬áºáááºáž á¡áá¶á¡áá»ááºááŒá ááºá áááºáááºááŸá¯á¡ááœáẠá€áá¯á¶ážáá»á¬ážááẠááá¯á¡ááºáá«áááºá áá»ááºááá±áá¬ááẠá¡áá¶ááá°áá¬áá»á¬ážááᯠááŸááºáááºážáááºáᬠá á¬ááœááºá¡ááœááºáá áºáá¯áá²á·ááá¯á· á€áá¯á¶ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá áááºážááá¯á¶ááŸááºá¡ááŒá±á¡áá±ááœááºá áá»ááºááá±áá¬ááẠááááºáá¬ážááŒá®áž á¡áááºá¡ááœááºááá¯á· á¡áááºáá¯á¶ážáá»á¬ážááᯠááá¯ážááŸááºážá áœá¬áá±ážááá¯á·áááºá ááá¯á·ááŒá±á¬áá·áºá ááááºááááºááŸá¯áá¯á¶ážáá»á¬ážááẠáá¬ážáá áºáá áºáá¯áá¯á¶ážááᯠáááºááŸáá¬ááá¯á· áááŒá±á¬ááºážáá²áá² á¡áá¶áááºááœáẠá¡áá¯á¶ážáááºáááºá áááºážááẠáááºážáááá·áºááœááºážááŸá¯ááŸáá·áº áá»áááºáááºáá¬ážáá±á¬ áááºážá á®á០ááááºááá¯á·ááŸá¯áá»á¬ážááᯠááááºááááẠááá°áááºá
ááá¯á·áá±á¬áº á¡áá¶ááœáá·áºááẠáá»ááºááá±áá¬á¡á¬áž á¡áááá·áºáá±ážáá»áŸáẠá¡áá¬á¡á¬ážáá¯á¶áž ááŒá±á¬ááºážáá²ááœá¬ážáááºá áááºážááẠá¡áá¶ááá°áá¬áá»á¬ážááᯠá áááºáá¯ááºáá¯ááºááŒá®áž áááºážááá¯á·á¡á¬áž input blocks áá»á¬ážááœáẠááá°áá¬áá»á¬ážááŒáá·áº á¡á á¬ážááá¯ážááŒá®áž ááŒá±á¬ááºážáá²áá¬ážáá±á¬ ááá±á¬ááºáá»á¬ážááᯠoutput ááœáẠááá·áºáá¬ážáááºá á¡áá¶áááºááẠá¡áá¶á áááºááœáá·áºáááºá á¡á±á¬ááºááœááºáá±á¬áºááŒáá¬ážáá±á¬ á¡áá¯ááºá¡á á®á¡á ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº áááá¯ááááºáá áºáá¯ááŒá áºáááºá
/* Ѐайл mstest2.c */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
int main()
{
ms_init();
/* СПзЎаеЌ ÑкзеЌплÑÑÑ ÑОлÑÑÑПв. */
MSFilter *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_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, snd_card_write, 0);
/* ÐПЎклÑÑаеЌ ОÑÑПÑМОк ÑакÑПв. */
ms_ticker_attach(ticker, voidsource);
/* ÐклÑÑаеЌ звÑкПвПй геМеÑаÑПÑ. */
char key='1';
ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY, (void*)&key);
/* ÐаеЌ, вÑеЌÑ, ÑÑÐŸÐ±Ñ Ð²Ñе блПкО ЎаММÑÑ
бÑлО пПлÑÑÐµÐœÑ Ð·Ð²ÑкПвПй каÑÑПй.*/
ms_sleep(2);
}
áá®áá®áᬠáá¯ááºááœáŸáá·áºáá°ááᯠá áááºááŒá®ážáá±á¬ááºá á á áºáá¯ááºááŸá¯ áá¯á¶ážáá¯ááᯠáááºáá®ážáááº- voidsourceá dtmfgená snd_card_write. áá¬áá®áááºážááŒá áºááᯠáááºáá®ážáá¬ážáááºá
ááá¯á·áá±á¬ááºáá»áœááºá¯ááºááá¯á·á circuit ááŸáá·áºá¡áá® filter áá»á¬ážááá¯áá»áááºáááºáááºááá¯á¡ááºááŒá®áž clock source ááá¯áá±á¬ááºáá¯á¶ážáá»áááºáááºáá¬ážááááºááŒá áºáá±á¬ááŒá±á¬áá·áº circuit áááºáá»ááºáá»ááºážá áááºáááºáááºáááºááŒá áºáááºá á¡áááºá áááºááẠáá¬áá®áááºážááŒá áºááᯠáááŒá®ážááŒááºáá±ážáá±á¬ áá¬ážáá áºáá áºáá¯ááá¯á· áá»áááºáááºáá«áá áá®áá®áá¬áá¯ááºááœáŸáá·áºáá°ááẠááœááºážáááºá¡ááœááºážááŸá á¡áááºážáá¯á¶áž á á áºáá¯ááºááŸá¯áá áºáᯠááá¯á·ááá¯áẠá¡ááœááºáá»á¬ážá¡á¬ážáá¯á¶áž "áá±áá²ááœáẠáá»áááºáá¬ážáááº" (ááá»áááºáááºáá¬ážáá«) ááœá±á·ááŸááá«á áá»ááºááœá¬ážááá¯ááºáááºá
áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯á á á áºáá¯ááºááŸá¯áá»á¬ážááᯠáá»áááºáááºááŒááºáž ááŒá®ážáá«ááŒá®á
ms_filter_link(src, src_out, dst, dst_in)
áááá¡ááŒááºážá¡áá¯á¶ááẠá¡áááºážá¡ááŒá áºá á áºáá¯ááºáááºá¡ááœáẠááœáŸááºááŒááá·áºáá±áá¬ááœááºá áá¯áááá¡ááŒááºážá¡áá¯á¶ááẠáááºážááŒá áºá¡ááœááºáá¶áá«ááºááŒá áºááẠ(á¡áááºááŸáá·áºá¡ááœááºáá»á¬ážááᯠáá¯áááŸá áááºá áá±ááœááºáá¬ážááŒá±á¬ááºáž áááááŒá¯áá«)á ááááá¡ááŒááºážá¡áá¯á¶ááẠáááºáá¶áá°á á áºáá¯ááºáááºá¡ááœáẠááœáŸááºááŒáá»ááºááŒá áºááŒá®áž á áá¯áá¹áá¡áá»ááºááŸá¬ áááºáá¶áá°ááá·áºááœááºážááŸá¯áá¶áá«ááºááŒá áºáááºá
á á áºáá¯ááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»áááºáááºáá¬ážááŒá®áž áá¬áá®áááºážááŒá áºááᯠáá±á¬ááºáá¯á¶ážáá»áááºáááºáá¬ážáá«ááẠ(ááá±á·áá±á¬ááºááá¯ááºážááœáẠáááºážááᯠááá¯ážááá¯ážááŸááºážááŸááºáž áááºááŸááºáá áºáá¯áᯠáá±á«áºááá¯áá«áááº)á ááá¯á·áá±á¬ááºááœáẠáá»áœááºá¯ááºááá¯á·á á¡áá¶áá¬ážáá áºáá»á¬áž á áááºá¡áá¯ááºáá¯ááºáá±á¬áºáááºáž ááœááºáá»á°áá¬á áá®áá¬áá»á¬ážááœáẠáá¬áá»áŸáááŒá¬ážááá¯ááºáá±ážáá« - á¡áá¶áá»ááºááá±áá¬ááẠááááºááœá¬ážááŒá®áž input data blocks áá»á¬ážááᯠááááºááááºá áœá¬ááŒááºáááºážááœá¬ážáá«áááºá á¡áá¶ááᯠá áááºáááºáá®ážáááºá áááºááẠáá»ááºááá±áᬠá á áºáá¯ááºááá·áºáááºážáááºážááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá
áá¯ááºážáá±á«áºááŸá "1" ááá¯ááºááᯠááŸáááºááŒááºážááŸáá·áº ááá¯ááºáá®áá±á¬ two-tone (DTMF) á¡áá»ááºááŒááŸá¯ááᯠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±ážáá«áááºá áá«ááá¯áá¯ááºááá¯á·á áá»áœááºáá±á¬áºááá¯á· function ááá¯áá¯á¶ážáááºá ms_filter_call_method() áá»áœááºá¯ááºááá¯á·ááẠMS_DTMF_GEN_PLAY áááºážáááºážááᯠáá±á«áºááá¯ááŒá®ážá áááºážááᯠááŒááºááœáá·áºááŒááºáž á¡áá»ááºááŒááŸá¯ááŸáá·áº ááá¯ááºáá®ááá·áºááá·áº áá¯ááºáá®ááá¯á· ááœáŸááºááŒááá·áº ááœáŸááºááŒáá»ááºáá áºáá¯á¡ááŒá ẠáááºážááᯠááŒááºáááºážáááºá
áá»ááºáá¬á¡á¬ážáá¯á¶ážá program ááᯠcompile áá¯ááºááá¯á·áá«á
$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`
ááŒá±ážáá«
$ ./mstest2
áááá¯ááááºááᯠá áááºááŒá®ážáá±á¬ááºá ááœááºááŒá°áá¬á áá®áá¬ááœáẠá¡áá¶ááŸá áºáá¶áá«ááá·áº ááá¯áá±á¬ááºážáá±á¬ á¡áá¶á¡áá»ááºááŒáá¶ááᯠáááºááŒá¬ážááá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á ááááá¯á¶áž á¡áá¶áááºáááºážááᯠáááºáá±á¬ááºááŒá®áž á
áááºáá²á·áááºá á
á
áºáá¯ááºááá·áºá¡áá¬áá»á¬ážááᯠáááºáá®ážáááºážá áááºážááá¯á·ááᯠáá»áááºáááºáááºážááŸáá·áº áááºážááá¯á·ááááºážáááºážáá»á¬ážááᯠáááºááá¯á·áá±á«áºááá¯ááááºááᯠáá»áœááºá¯ááºááá¯á· ááŒááºááœá±á·áá²á·ááááºá áá»áœááºá¯ááºááá¯á·á áááŠážá¡á±á¬ááºááŒááºááŸá¯ááᯠáá»áœááºá¯ááºááá¯á· áá»á±áááºáá±áá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·á áááá¯ááááºá០ááœááºáááœá¬ážáá® ááœá²áá±áááºááŸááºáá¬ážáá±á¬ ááŸááºáá¬ááºááᯠáááœááºá
á±ááá·áºá¡áá»ááºááᯠá¡á¬áá¯á¶á
áá¯ááºááẠááá¯á¡ááºáá«áááºá áá±á¬ááºá
source: www.habr.com