Sahaminta mashiinka Mediastreamer2 VoIP. Qaybta 2

Nuxurka maqaalku waxa aan ka soo qaatay kanaalka zen.

Sahaminta mashiinka Mediastreamer2 VoIP. Qaybta 2

Abuuritaanka Tone Generator

Kii hore maqaal Waxaan rakibnay maktabadda qulqulka warbaahinta, agabka horumarinta waxaanan tijaabinay shaqeyntooda anagoo dhisnay codsi tijaabo ah.

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:

Sahaminta mashiinka Mediastreamer2 VoIP. Qaybta 2

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 maqaal waxaan baran doonaa inaan is nadiifino.

Source: www.habr.com

Add a comment