د مقالې مواد زما څخه اخیستل شوي دي
د ټون جنراتور جوړول
په تیرو کې
نن ورځ موږ به یو اپلیکیشن جوړ کړو چې کولی شي په غږ کارت کې د ټون سیګنال رامینځته کړي. د دې ستونزې د حل لپاره موږ اړتیا لرو چې فلټرونه د غږ جنراتور سرکټ سره وصل کړو چې لاندې ښودل شوي:
موږ ډیاګرام له کیڼ څخه ښیې ته لوستلو، دا هغه لوري دی چې زموږ د معلوماتو جریان حرکت کوي. تیر هم دې ته اشاره کوي. مستطیلونه هغه فلټرونه په ګوته کوي چې د ډیټا بلاکونه پروسس کوي او پایله یې تولیدوي. د مستطیل دننه، د هغې رول په ګوته شوی او د فلټر ډول یوازې لاندې لوی لیکونو کې ښودل شوی. هغه تیرونه چې مستطیلونه سره نښلوي د معلوماتو کتارونه دي چې له لارې یې د ډیټا بلاکونه له فلټر څخه فلټر ته لیږدول کیږي. په عموم کې، یو فلټر کولی شي ډیری داخلې او پایلې ولري.
دا ټول د ساعت سرچینې سره پیل کیږي، کوم چې ټیمپو ټاکي په کوم کې چې ډاټا په فلټرونو کې محاسبه کیږي. د دې د ساعت دورې له مخې، هر فلټر ټول ډیټا بلاکونه پروسس کوي چې د هغې په داخل کې دي. او د پایلې سره بلاکونه په کتار کې اچوي. لومړی، د ساعت سرچینې ته نږدې فلټر محاسبه ترسره کوي، بیا هغه فلټرونه چې د هغې له محصولاتو سره وصل دي (ډیری محصولات کیدی شي)، او داسې نور. وروسته له دې چې په زنځیر کې وروستی فلټر پروسس پای ته ورسوي ، اجرا کول تر هغه وخته پورې ودریږي چې نوی ساعت راشي. بیټس، په ترتیب سره، د 10 ملی ثانیو وقفه تعقیب کړئ.
راځئ چې خپل ډیاګرام ته راستون شو. د ساعت دوره د خاموشۍ سرچینې ان پټ ته راځي؛ دا یو فلټر دی، کوم چې د هر ساعت دورې لپاره په خپل محصول کې د صفرونو لرونکی ډیټا بلاک رامینځته کولو کې بوخت دی. که موږ دا بلاک د غږ نمونو بلاک په توګه وګورو، نو دا د خاموشۍ پرته بل څه ندي. په لومړي نظر کې، دا عجيب ښکاري چې د خاموشۍ سره د ډیټا بلاکس تولید کړي - په هرصورت، دا اوریدل کیدی نشي، مګر دا بلاکونه د غږ سیګنال جنراتور عملیاتو لپاره اړین دي. جنراتور دا بلاکونه د کاغذ د خالي پاڼې په څیر کاروي، د غږ نمونې ثبتوي. په خپل نورمال حالت کې، جنراتور بند شوی او په ساده ډول د ان پټ بلاکونه تولید ته لیږدوي. په دې توګه، د خاموشۍ بلاکونه له کیڼ څخه ښي خوا ته د ټول سرکټ له لارې بدلیږي، په غږ کارت کې پای ته رسیږي. کوم چې په خاموشۍ سره د هغې ان پټ سره تړل شوي قطار څخه بلاکونه اخلي.
مګر هرڅه بدلیږي که چیرې جنراتور ته د غږ غږولو قومانده ورکړل شي ، نو دا د غږ نمونې رامینځته کول پیل کوي او د ان پټ بلاکونو نمونو سره یې ځای په ځای کوي او بدل شوي بلاکونه په محصول کې اچوي. د غږ کارت غږ پیل کوي. لاندې یو برنامه ده چې پورته تشریح شوي کاري سکیم پلي کوي:
/* Файл 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. د ساعت سرچینه رامینځته کیږي.
بیا تاسو اړتیا لرئ زموږ د سرکټ سره سم فلټرونه وصل کړئ ، او د ساعت سرچینه باید وروستی وصل شي ، ځکه چې له دې وروسته به سرکټ سمدلاسه فعالیت پیل کړي. که تاسو د ساعت سرچینه له یو نامناسب سرکټ سره وصل کړئ ، نو دا پیښ کیدی شي چې د میډیا سټیمر خراب شي که چیرې دا په زنځیر کې لږترلږه یو فلټر د ټولو آخذونو یا ټولو محصولاتو سره کشف کړي "په هوا کې ځړول" (نه وصل شوي).
د فلټرونو نښلول د فنکشن په کارولو سره ترسره کیږي
ms_filter_link(src, src_out, dst, dst_in)
چیرته چې لومړی دلیل د سرچینې فلټر ته اشاره کوي، دویم دلیل د سرچینې محصول شمیره ده (یادونه وکړئ چې داخلې او محصولات د صفر څخه پیل کیږي). دریم دلیل د رسیدونکي فلټر ته اشاره کوي، څلورم د رسیدونکي ان پټ شمیره ده.
ټول فلټرونه سره وصل دي او د ساعت سرچینه وروستی وصل شوی (له دې وروسته به موږ په ساده ډول دا ټیکر ووایو). وروسته له دې چې زموږ د غږ سرکټ کار پیل کوي، مګر د کمپیوټر سپیکرو کې لاهم هیڅ شی نه اوریدل کیږي - د غږ جنراتور بند شوی او په ساده ډول د خاموشۍ سره د ان پټ ډیټا بلاکونو څخه تیریږي. د ټون تولید پیل کولو لپاره ، تاسو اړتیا لرئ د جنریټر فلټر میتود چل کړئ.
موږ به په تلیفون کې د "1" تڼۍ فشارولو سره سم دوه ټون (DTMF) سیګنال تولید کړو. د دې کولو لپاره، موږ فنکشن کاروو ms_filter_call_method() موږ د MS_DTMF_GEN_PLAY طریقه وایو، دا د دلیل په توګه کوډ ته د اشارې په توګه لیږدول چې د پلې بیک سیګنال باید ورته وي.
ټول هغه څه چې پاتې دي د پروګرام تالیف کول دي:
$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`
او منډه کړه:
$ ./mstest2
د برنامه پیل کولو وروسته ، تاسو به د کمپیوټر سپیکر کې یو لنډ غږیز سیګنال واورئ چې دوه ټونونه لري.
موږ خپل لومړی غږ سرکټ جوړ او پیل کړ. موږ ولیدل چې څنګه د فلټر مثالونه رامینځته کړو، څنګه یې وصل کړو او څنګه د دوی میتودونو ته زنګ ووهو. پداسې حال کې چې موږ د خپلې لومړنۍ بریا څخه خوښ یو، موږ لاهم باید دې حقیقت ته پام وکړو چې زموږ برنامه د وتلو دمخه تخصیص شوې حافظه نه خلاصوي. په راتلونکي کې
سرچینه: www.habr.com