Ny fitaovan'ny lahatsoratra dia nalaina avy amin'ny ahy
Mamorona Tone Generator
Tamin'ny teo aloha
Androany isika dia hamorona fampiharana izay afaka miteraka famantarana feo amin'ny karatra fanamafisam-peo. Mba hamahana ity olana ity dia mila mampifandray ireo sivana amin'ny faritra mpamokatra feo aseho eto ambany isika:
Mamaky ny kisary izahay miankavia miankavanana, io no lalana izoran'ny fikorianan'ny angonay. Ny zana-tsipìka koa dia manondro izany. Ny mahitsizoro dia manondro sivana izay manodina sakana angona ary mamoaka ny vokatra. Ao anatin'ny mahitsizoro dia aseho ny anjara asany ary ny karazana sivana dia aseho amin'ny litera lehibe etsy ambany. Ny zana-tsipìka mampifandray ireo mahitsizoro dia filaharana angon-drakitra izay anaterana ireo sakana angona avy amin'ny sivana mankany amin'ny sivana. Amin'ny ankapobeny, ny sivana dia afaka manana fidirana sy fivoahana maro.
Izany rehetra izany dia manomboka amin'ny loharanon'ny famantaranandro, izay mametraka ny fotoana kajy ny angona ao amin'ny sivana. Araka ny tsingerin'ny famantaranandrony, ny sivana tsirairay dia manodina ny bloc data rehetra izay ao anatin'ny fampidirana azy. Ary mametraka sakana miaraka amin'ny vokatra mivoaka ao amin'ny filaharana. Voalohany, ny sivana akaiky indrindra amin'ny loharanon'ny famantaranandro dia manao kajy, avy eo ny sivana mifandray amin'ny vokatra azony (mety ho maro ny vokatra), sy ny sisa. Rehefa tapitra ny fanodinana ny sivana farany amin'ny rojo dia mijanona ny famonoana mandra-pahatongan'ny famantaranandro vaovao. Ny kapoka, raha ny mahazatra, dia manaraka elanelana 10 milisegondra.
Andao hiverina amin'ny kisary. Ny tsingerin'ny famantaranandro dia tonga amin'ny fidirana amin'ny loharano fahanginana; sivana ity, izay sahirana amin'ny famoronana sakana misy angona misy aotra amin'ny famoahana azy isaky ny tsingerin'ny famantaranandro. Raha heverintsika ho santionan'ny feo io sakana io, dia tsy inona izany fa fahanginana. Raha vao jerena dia toa hafahafa ny mamorona sakana angon-drakitra miaraka amin'ny fahanginana - na izany aza, tsy re izany, fa ireo sakana ireo dia ilaina amin'ny fampandehanana ny mpamokatra famantarana feo. Ny mpamokatra dia mampiasa ireo sakana ireo toy ny taratasy tsy misy na inona na inona, mirakitra santionany feo ao anatiny. Amin'ny maha-ara-dalΓ na azy dia tapaka ny mpamokatra ary alefa fotsiny ireo sakana fampidirana mankany amin'ny vokatra. Noho izany, ny sakana fahanginana dia mandalo tsy miova manerana ny faritra manontolo avy any ankavia miankavanana, ary miafara amin'ny karatra fanamafisam-peo. Izay maka mangina ny sakana amin'ny filaharana mifandray amin'ny fampidirana azy.
Saingy miova ny zava-drehetra raha omena baiko hilalao feo ny mpamokatra, manomboka mamoaka santionany feo izy ary manolo azy ireo amin'ny santionany ao amin'ny blocs input ary mametraka ny bloc niova amin'ny vokatra. Manomboka milalao feo ny karatra fanamafisam-peo. Ity ambany ity ny programa iray izay mampihatra ny tetik'asa voalaza etsy ambony:
/* Π€Π°ΠΉΠ» 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);
}
Aorian'ny fanombohana ny streamer media dia misy sivana telo noforonina: voidsource, dtmfgen, snd_card_write. Misy loharanon'ny famantaranandro noforonina.
Avy eo dia mila mampifandray ireo sivana mifanaraka amin'ny faritra misy antsika ianao, ary ny loharanon'ny famantaranandro dia tsy maintsy mifandray amin'ny farany, satria aorian'izany dia manomboka miasa avy hatrany ny faritra. Raha ampifandraisinao amin'ny faritra tsy vita ny loharanon'ny famantaranandro iray, dia mety hidona ny streamer media raha mahita sivana iray farafahakeliny ao amin'ny rojo miaraka amin'ny fidirana rehetra na ny vokatra rehetra "mihantona amin'ny rivotra" (tsy mifandray).
Ny fampifandraisana sivana dia atao amin'ny fampiasana ny fiasa
ms_filter_link(src, src_out, dst, dst_in)
izay tondro mankany amin'ny sivana loharano ny tohan-kevitra voalohany, ny tohan-kevitra faharoa dia ny laharan'ny famoahana loharano (mariho fa ny fidirana sy ny vokatra dia isaina manomboka amin'ny aotra). Ny hevitra fahatelo dia manondro ny sivana mpandray, ny fahefatra dia ny laharana fampidirana mpandray.
Ny sivana rehetra dia mifamatotra ary ny loharanon'ny famantaranandro dia mifamatotra amin'ny farany (arakaraka izany dia antsoina hoe ticker fotsiny izany). Aorian'izay dia manomboka miasa ny fizaran-kiranay, saingy mbola tsy misy re ao amin'ny fanamafisam-peo amin'ny solosaina - maty ny mpamokatra feo ary mandalo fotsiny amin'ny alΓ lan'ny blocs data fampidirana am-pahanginana. Mba hanombohana mamorona feo dia mila mampiasa ny fomba sivana mpamokatra ianao.
Hamokatra famantarana roa (DTMF) mifanaraka amin'ny fanindriana ny bokotra "1" amin'ny telefaona izahay. Mba hanaovana izany, dia mampiasa ny asa ms_filter_call_method() Antsoinay ny fomba MS_DTMF_GEN_PLAY, mamindra azy ho tohan-kevitra ho tondro mankany amin'ny kaody tokony hifanaraka amin'ny famantarana playback.
Ny hany sisa tavela dia ny fanangonana ny programa:
$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`
Ary mihazakazaka:
$ ./mstest2
Aorian'ny fanombohana ny fandaharana dia handre feo fohy misy feo roa ao amin'ny mpandahateny solosaina ianao.
Nanamboatra sy nanomboka ny fizaran-tserananay voalohany izahay. Hitanay ny fomba hamoronana ohatra sivana, ny fomba hampifandraisana azy ireo ary ny fomba fiantsoana ny fomba fiasany. Na dia faly tamin'ny fahombiazanay voalohany aza izahay, dia mbola mila mitandrina izahay fa ny programanay dia tsy mahafaka ny fahatsiarovana nomena alohan'ny hivoahany. Amin'ny manaraka
Source: www.habr.com