Nuxurka maqaalku waxa aan ka soo qaatay
Abuuritaanka Tone Generator
Kii hore
Maanta waxaan abuuri doonaa codsi ka soo saari kara calaamada codka kaadhka codka. Si loo xalliyo dhibaatadan waxaan u baahanahay inaan filtarrada ku xidhno wareegga koronto dhaliyaha dhawaaqa ee hoos ku qoran:
Waxaan ka akhrinay jaantuska bidix ilaa midig, kani waa jihada ay xogtayadu u socoto. Fallaadhaha ayaa sidoo kale tilmaamaya tan. Laydigu waxay tilmaamayaan filtarrada ka shaqeeya blocks xogta oo soo saara natiijada. Gudaha leydiga, doorkeeda ayaa lagu tilmaamayaa nooca shaandhada waxaa lagu muujiyey xarfo waaweyn oo hoos ku yaal. Fallaadhaha isku xidha leydiyada waa saf xogeed kuwaas oo blocks xogta laga keeno shaandhaynta ilaa shaandhaynta. Guud ahaan, filtarku waxa uu yeelan karaa waxyaalo badan iyo wax-soo-saar.
Dhammaantood waxay ka bilaabmaan isha saacadda, taas oo dejisa wakhtiga xogta lagu xisaabiyo filtarrada. Marka loo eego meertada saacada, shaandheyn kastaa waxay habaysaa dhammaan xogta blocks ee ku jirta qaybteeda. Oo wuxuu dhigayaa baloogyada natiijada ka soo baxday safka. Marka hore, shaandhada ugu dhow isha saacaddu waxay fulisaa xisaabinta, ka dibna filtarrada ku xiran wax soo saarkeeda (waxaa jiri kara wax soo saar badan), iyo wixii la mid ah. Ka dib shaandhada ugu dambaysa ee silsiladda ayaa dhammaysa habaynta, fulintu way joogsanaysaa ilaa ay saacad cusub timaaddo. Garaacista, sida caadiga ah, waxay raacdaa inta u dhaxaysa 10 millise seconds.
Aan ku soo laabano jaantuskeena. Wareegyada saacaddu waxa ay imanayaan gelinta isha aamusnaanta; kani waa shaandhaynta, kaas oo ku mashquulsan soo saarista xogta ay ku jiraan eber ee soo saarkeeda wareeg kasta oo saacad ah. Haddii aan u tixgelinno block this sida block of shaybaarka dhawaaqa, markaas tani ma aha wax ka badan aamusnaanta. Jaleecada hore, waxa ay u muuqataa qariib ah in la abuuro blocks xogta aamusnaan - ka dib oo dhan, lama maqli karo, laakiin blocks kuwanu waa lagama maarmaanka u ah hawlgalka matoor signalka dhawaaqa. Koronto-dhaliyehu waxa uu u adeegsadaa baloogyadan sida xaashi madhan, isaga oo ku duubaya muunadaha dhawaaqa iyaga. Xaaladeeda caadiga ah, koronto-dhaliye waa la damiyay oo si fudud u sii gudbiyaa baloogyada wax-soo-saarka. Sidaa darteed, baloogyada aamusnaanta waxay u gudbaan wareegga oo dhan bidix ilaa midig, iyagoo ku dhammaanaya kaadhka codka. Kaas oo aamusnaan ka qaada baloogyada safka ku xidhan gelinta.
Laakiin wax kastaa way is beddelaan haddii koronto-dhaliye la siiyo amar uu ku ciyaari karo dhawaaqa, wuxuu bilaabayaa inuu soo saaro muunado dhawaaqa oo uu ku beddelo muunado ku jira blocks-ka wax-soo-gelinta wuxuuna dhigayaa balooggii beddelay soo-saarka. Kaarka dhawaaqa wuxuu bilaabaa inuu dhawaaqo. Hoos waxaa ku yaal barnaamij fulinaya nidaamka shaqada ee kor lagu tilmaamay:
/* Π€Π°ΠΉΠ» 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);
}
Kadib bilawga qulqulka warbaahinta, saddex filtar ayaa la abuuray: voidsource, dtmfgen, snd_card_write. Isha saacada ayaa la abuuray.
Kadibna waxaad u baahan tahay inaad ku xirto filtarrada si waafaqsan wareeggayaga, iyo isha saacadda waa in lagu xiro ugu dambeyntii, tan ka dib markaa wareegga ayaa isla markiiba bilaabi doona inuu shaqeeyo. Haddii aad ku xidho isha saacada wareegga aan dhammayn, waxaa laga yaabaa inay dhacdo in qulqulka warbaahintu uu shil galo haddii uu ogaado ugu yaraan hal shaandhaynta silsiladda oo leh dhammaan agabyada ama dhammaan wax soo saarka "hawo ku dhegan" (aan ku xidhnayn).
Isku xirka filtarrada waxaa lagu sameeyaa iyadoo la adeegsanayo shaqada
ms_filter_link(src, src_out, dst, dst_in)
halka dooda kowaad ay tahay tilmaanta shaandhada isha, dooda labaadna waa tirada wax soo saarka isha (ogow in wax-soo-saarka iyo wax-soo-saarkaba ay nambaraysan yihiin laga bilaabo eber). Doodda saddexaad waa tilmaanta shaandhada qaataha, tan afraadna waa lambarka gelitaanka qaataha.
Dhammaan filtarrada way isku xidhan yihiin, isha saacadduna way ku xidhan tahay ugu dambayn (hadda ka dib waxaan si fudud ugu yeedhi doonaa ticker). Taas ka dib markii wareeggayaga dhawaaqu uu bilaabo inuu shaqeeyo, laakiin waxba lagama maqli karo ku hadla kombuyuutarrada weli - koronto-dhaliyaha codka waa la damiyay oo si fudud u dhex maraya xogta macluumaadka iyada oo la aamusay. Si aad u bilowdo abuurista cod, waxaad u baahan tahay inaad socodsiiso habka filter-ka dhaliyaha.
Waxaan soo saari doonaa calaamad laba-tone ah (DTMF) oo u dhiganta riixitaanka badhanka "1" ee taleefanka. Si tan loo sameeyo, waxaan isticmaalnaa shaqada ms_filter_hab_call () Waxaan ugu yeernaa habka MS_DTMF_GEN_PLAY, anagoo u gudbinayna dood ahaan tilmaame koodka ay tahay in signalka dib-u-ciyaartu uu waafaqsan yahay.
Waxa hadhay oo dhan waa in la ururiyo barnaamijka:
$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`
Oo orod:
$ ./mstest2
Ka dib markaad bilowdo barnaamijka, waxaad maqli doontaa dhawaaq gaaban oo ka kooban laba tone oo ku hadlaya kumbiyuutarka.
Waxaan dhisnay oo aan bilownay wareeggii ugu horreeyay ee dhawaaqa. Waxaan aragnay sida loo abuuro tusaalooyin shaandheyn, sida loo xiro iyo sida loogu yeero hababkooda. In kasta oo aan ku faraxsannahay guushayada bilowga ah, waxaan weli u baahanahay inaan fiiro gaar ah u yeelano xaqiiqda ah in barnaamijkeenu uusan xoreynin xusuusta loo qoondeeyay ka hor intaanan bixin. Midda xigta
Source: www.habr.com