Zomwe zili m'nkhaniyi zatengedwa kuchokera ku wanga
Kupanga Jenereta wa Toni
M'mbuyomu
Lero tipanga pulogalamu yomwe imatha kupanga siginecha yamawu pakhadi lamawu. Kuti tithane ndi vutoli tiyenera kulumikiza zosefera mu gawo la jenereta lomwe likuwonetsedwa pansipa:
Timawerenga chithunzicho kuchokera kumanzere kupita kumanja, iyi ndi njira yomwe deta yathu imayendera. Mivi imasonyezanso izi. Rectangles amawonetsa zosefera zomwe zimapanga midadada ya data ndikutulutsa zotsatira. Mkati mwa rectangle, udindo wake umasonyezedwa ndipo mtundu wa fyuluta umasonyezedwa ndi zilembo zazikulu pansipa. Mivi yolumikiza timakonati ndi mizere ya data momwe midadada ya data imatumizidwa kuchokera ku fyuluta kupita ku kusefa. Nthawi zambiri, fyuluta imatha kukhala ndi zolowetsa ndi zotuluka zambiri.
Zonse zimayamba ndi gwero la wotchi, lomwe limayika tempo yomwe deta imawerengedwa muzosefera. Malinga ndi kayendedwe ka wotchi yake, fyuluta iliyonse imagwiritsa ntchito midadada yonse yomwe ili panjira yake. Ndipo amayika midadada ndi zotsatira zake pamzere. Choyamba, fyuluta yomwe ili pafupi kwambiri ndi gwero la wotchi imapanga mawerengedwe, ndiye zosefera zomwe zimagwirizanitsidwa ndi zotsatira zake (pakhoza kukhala zotuluka zambiri), ndi zina zotero. Zosefera zomaliza mu unyolo zikamaliza kukonza, kupha kumayima mpaka wotchi yatsopano itafika. Kumenyedwa, mwachisawawa, kumatsata kapakati ka 10 milliseconds.
Tiyeni tibwerere ku chithunzi chathu. Mawotchi amafika pomwe pali gwero lachete; iyi ndi fyuluta, yomwe ili kalikiliki kupanga chipika cha data chokhala ndi ziro pazomwe imatuluka pa wotchi iliyonse. Ngati tiwona chipikachi ngati chipika cha zitsanzo zamawu, ndiye kuti palibenso china koma chete. Poyang'ana koyamba, zikuwoneka zachilendo kupanga midadada ya data mwakachetechete - pambuyo pake, sizingamveke, koma midadada iyi ndiyofunikira pakugwira ntchito kwa jenereta yamawu. Jenereta imagwiritsa ntchito midadada iyi ngati pepala lopanda kanthu, kujambula zitsanzo zamawu. M'malo ake abwino, jenereta imazimitsidwa ndikungotumiza midadada yolowera kuti itulutsidwe. Chifukwa chake, midadada ya chete imadutsa mosasinthika kudera lonselo kuchokera kumanzere kupita kumanja, ndikumathera mu khadi lamawu. Chomwe chimatenga mwakachetechete midadada kuchokera pamzere wolumikizidwa ndi kulowetsa kwake.
Koma chirichonse chimasintha ngati jenereta ipatsidwa lamulo loti azisewera phokoso, imayamba kupanga zitsanzo za phokoso ndikulowetsamo zitsanzo muzitsulo zolowetsamo ndikuyika midadada yosinthidwa pazotulutsa. Khadi lomveka limayamba kusewera. Pansipa pali pulogalamu yomwe imagwiritsa ntchito chiwembu chofotokozedwa pamwambapa:
/* Π€Π°ΠΉΠ» 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);
}
Pambuyo poyambitsa media streamer, zosefera zitatu zimapangidwa: voidsource, dtmfgen, snd_card_write. Gwero la wotchi limapangidwa.
Ndiye muyenera kulumikiza zosefera molingana ndi dera lathu, ndipo gwero la wotchi liyenera kulumikizidwa komaliza, chifukwa pambuyo pake dera limayamba kugwira ntchito. Ngati mulumikiza gwero la wotchi kudera losamalizidwa, zitha kuchitika kuti media streamer imawonongeka ngati iwona fyuluta imodzi mu unyolo ndi zolowetsa zonse kapena zotuluka zonse "zolendewera mlengalenga" (zosalumikizidwa).
Kulumikiza zosefera kumachitika pogwiritsa ntchito ntchitoyi
ms_filter_link(src, src_out, dst, dst_in)
pomwe mtsutso woyamba ndi cholozera ku fyuluta yochokera, mtsutso wachiwiri ndi nambala yotulutsa (zindikirani kuti zolowa ndi zotuluka zimawerengedwa kuyambira ziro). Mtsutso wachitatu ndi cholozera kwa fyuluta yolandirira, yachinayi ndi nambala yolowera yolandila.
Zosefera zonse zimalumikizidwa ndipo gwero la wotchi limalumikizidwa komaliza (pambuyo pake tingoyitcha kuti ticker). Pambuyo pake phokoso lathu lozungulira limayamba kugwira ntchito, koma palibe chomwe chingamveke m'makamba apakompyuta komabe - jenereta ya phokoso imazimitsidwa ndikungodutsa midadada yolowetsamo ndi chete. Kuti muyambe kupanga kamvekedwe, muyenera kuyendetsa njira yojambulira jenereta.
Tidzapanga chizindikiro chamitundu iwiri (DTMF) chofanana ndi kukanikiza batani la "1" pafoni. Kuti tichite izi, timagwiritsa ntchito ms_sefa_call_method() Timatcha njira ya MS_DTMF_GEN_PLAY, ndikuipereka ngati mkangano ngati cholozera ku code yomwe siginecha yosewera iyenera kugwirizana nayo.
Zomwe zatsala ndikuphatikiza pulogalamuyo:
$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`
Ndipo kuthamanga:
$ ./mstest2
Mukangoyambitsa pulogalamuyo, mudzamva mawu achidule okhala ndi matani awiri mu choyankhulira pakompyuta.
Tinamanga ndi kukhazikitsa chigawo chathu choyamba cha mawu. Tinawona momwe tingapangire zochitika zosefera, momwe tingawalumikizire ndi momwe tingatchulire njira zawo. Ngakhale ndife okondwa ndi kupambana kwathu koyamba, tifunikabe kulabadira mfundo yakuti pulogalamu yathu simamasula kukumbukira koperekedwa tisanachoke. Chotsatira
Source: www.habr.com