Explorans machinam Mediastreamer2 VoIP. Pars I

Materia articuli sumitur ex my rhoncus channel.

Explorans machinam Mediastreamer2 VoIP. Pars I

Partum Tonus Generator

In priore articulus In instrumentis streamer bibliothecam instituimus, instrumenta evolutionis probavimus eorumque functionem probavimus per applicationem iudicii aedificandi.

Hodie applicationem creabimus quae signum soni in card sono generare potest. Ad hanc quaestionem solvendam necesse est columellas in circulo generantis soni coniungi, qui infra ostendentur:

Explorans machinam Mediastreamer2 VoIP. Pars I

Figuram a sinistra ad dextram legimus, haec est directio qua notitia nostra fluit movet. Etiam sagittis at mauris id efficitur. Filtra rectangula indicant processus cuneos notitiarum et euentuum output. Intra rectangulum, munus eius indicatur et genus colum in litteris maiusculis modo infra indicatur. Sagittae connectentes rectangula sunt stantibus antedictis, per quas insulis notitiarum a colum ad colum liberantur. In genere, colamentum multa initibus et outputs habere potest.

Omnia incipit a fonte horologii, quod tempus ponit quo notitia in columellae computatur. Secundum cyclum horologii, singuli colum processus omnes notitias caudices qui in suo input sunt. Et impedit cum ex in queue. Primum, colum proxime ad fontem horologii calculos facit, deinde filtra cum suis outputibus connexa (plures esse possunt outputes), et sic porro. Post ultimum colum in catena processus finit, exsecutio cessat donec novum horologium adveniat. Verberat, defalta, intervallum 10 millium secundorum sequitur.

Ad nostrum schemate redeamus. Circulus horologii ad fontem initus silentii perveniunt, hoc est filtrum, quod est occupatus generans truncum notitiae continens cyphris in suo output pro quolibet cyclo horologii. Si hunc impedimentum tamquam truncum archetypi soni consideramus, hoc nihil aliud est quam silentium. In prima specie mirum videtur notitias cum silentio generare - post omnes, audiri non potest, sed hae impedimenta sunt necessaria ad operationem soni generantis. Generator his caudices utitur sicut blank charta, soni exempla in eas notans. In statu suo normali, generans avertit et simpliciter promovet input cuneos ad output. Sic cuneos silentii immutantur per totum ambitum a sinistro ad dextrum, usque ad sonum card. Quod tacite accipit cuneos a queue connexa suo input.

Sed omnia mutantur si generans mandatur ut sonus canat, incipit generare exempla sana et ea cum exemplis in initibus caudicis reponit et mutatos caudices in output ponit. Sonus chartae incipit sonus ludere. Infra programma est ut instrumentum operis perficiat supra descriptum:

/* Π€Π°ΠΉΠ» 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);   
}

Post initializing instrumentorum streamer, tres filtrae creantur; vacuum, dtmfgen, snd_card_write. Fons horologii creatur.

Tunc filtras coniungere debes secundum ambitum nostrum, et fons horologii novissime coniungi debet, quia post hoc statim circuire incipit operari. Si horologium fontem ad circuitum imperfectum coniungas, fieri potest ut instrumentorum conglutinatio fragore si deprehendat saltem unum colum in catena cum omnibus initibus vel omnibus inputationibus "in aere pendentibus" (non connexis).

Filtra connectens fit utens munere

ms_filter_link(src, src_out, dst, dst_in)

ubi prima argumentatio monstrator a fonte sparguntur, secunda argumentatio est fons output numerus (nota quod inputationes et outputes a nulla incipientes numerantur). Tertium argumentum est regula recipientis sparguntur, quartum est recipiens input numerum.

Filtra omnia connexa sunt et fons horologii novissimus iungitur (infra postea simpliciter ricinum appellabimus). Post quem sonus noster ambitus incipit operari, sed nihil audiri potest in loquentibus computatoriis adhuc - sonus generans avertit et simpliciter transit per input notitias cum silentio. Committitur tonum generans, generans colum modum currere debes.

Signum duorum sonorum (DTMF) generabimus respondens ad exprimendam "I" bullam in telephono. Ad hoc munus utimur ms_filter_call_method () Methodum MS_DTMF_GEN_PLAY vocamus, eam praeteriens ut argumenti monstratorem codicem quem signum playbacki correspondeat.

Reliquum est ut rationem componat:

$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`

Et currite;

$ ./mstest2

Incipiens rationem, audies signum breve sonum duorum tonorum in loquentis computatorio constans.

Primum ambitum sonum nostrum aedificavimus et deducimus. Vidimus quomodo exempla colum creare, quomodo coniungere et quomodo modos vocare. Dum laetamur in initiali nostro successu, adhuc operam dare debemus quod institutio nostra ante exitum datam memoriam non liberat. In altera articulus discemus mundare post nos.

Source: www.habr.com