Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 4

Zvinyorwa zvechinyorwa zvakatorwa kubva kwangu zen channel.

Kugadzira mita yechiyero chechiratidzo

Pakupedzisira chinyorwa Isu takajekesa kumisa kwakaringana kwezvirongwa tichishandisa media streamer.

Muchinyorwa chino tichaunganidza chiratidzo chechiyero mita yedunhu uye tidzidze kuverenga kuyerwa kwemhedzisiro kubva kune sefa. Ngationgororei kuyera kwechiyero.

Iyo seti yemafirita akapihwa ne media streamer anosanganisira sefa, MS_VOLUME, iyo inokwanisa kuyera iyo RMS nhanho yechiratidzo ichipfuura nepakati payo, kurerutsa chiratidzo uye kuita akawanda anobatsira uye asingatarisirwe mabasa. Tichapa chinyorwa chose kune iyi sefa gare gare. Asi ikozvino tichaishandisa semamita.

Isu tinoshandisa toni jenareta sechiratidzo sosi, chiratidzo kubva icho chinotumirwa kune MS_VOLUME sefa, kune iyo inobuda iyo inonzwika kadhi yakabatana.

Mumuenzaniso uyu, isu tichashandisa jenareta sefa mune zvishoma zvakasiyana modhi - ichagadzira imwe-toni chiratidzo kwatiri, i.e. chiratidzo chine imwechete sinusoidal oscillation.

Pamusoro peiyo frequency uye amplitude, isu tichada kuseta nguva iyo chiratidzo chichagadzirwa; inofanirwa kunge yakakwana kuitira kuti nhamba yakakwana yemasampuli ipfuure nepakati MS_VOLUME sefa yekuyera. Kuendesa marongero kune jenareta, iyo MSDtmfGenCustomTone chimiro inoshandiswa:

struct _MSDtmfGenCustomTone{
    char tone_name[8];     /* ВСкстовоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ сигнала ΠΈΠ· 8 Π±ΡƒΠΊΠ².*/
    int duration;          /* Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сигнала Π² миллисСкундах.*/
    int frequencies[2];    /* ΠŸΠ°Ρ€Π° частот ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ сигнал. */
    float amplitude;       /* Амплитуда Ρ‚ΠΎΠ½ΠΎΠ², 1.0 соотвСтствуСт ΡƒΡ€ΠΎΠ²Π½ΡŽ 0 Π΄Π‘ ΠΎΡ‚ ΠΌΠΈΠ»Π»ΠΈΠ²Π°Ρ‚Ρ‚Π° Π½Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ 600 Ом.*/
    int interval;          /* ΠŸΠ°ΡƒΠ·Π° Π² миллисСкундах ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ проигрывания сигнала.*/
    int repeat_count;      /* ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ².*/
};
typedef struct _MSDtmfGenCustomTone MSDtmfGenCustomTone;

Kutanga jenareta, tichashandisa nzira yayo yeMS_DTMF_GEN_PLAY_CUSTOM.

Block dhayagiramu yechiratidzo chekugadzirisa:

Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 4

Kodhi yepurogiramu inoshandisa chirongwa ichi inoratidzwa pazasi.

/* Π€Π°ΠΉΠ» mstest3.c */

#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/msvolume.h>

int main()
{
    ms_init();
    /* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ экзСмпляры Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². */
    MSFilter  *voidsource=ms_filter_new(MS_VOID_SOURCE_ID);
    MSFilter  *dtmfgen=ms_filter_new(MS_DTMF_GEN_ID);
    MSFilter  *volume=ms_filter_new(MS_VOLUME_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, volume, 0);
    ms_filter_link(volume, 0, snd_card_write, 0);

    /* ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ². */
    ms_ticker_attach(ticker,voidsource);

    MSDtmfGenCustomTone dtmf_cfg;

   /* УстанавливаСм имя нашСго сигнала, помня ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² массивС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹
    ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ мСсто для нуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† строки. */
    strncpy(dtmf_cfg.tone_name, "busy", sizeof(dtmf_cfg.tone_name));
    dtmf_cfg.duration=1000;
    dtmf_cfg.frequencies[0]=440; /* Π‘ΡƒΠ΄Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠ½, частоту Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΎΠ½Π° установим Π² 0.*/
    dtmf_cfg.frequencies[1]=0;
    dtmf_cfg.amplitude=1.0; /* Π’Π°ΠΊΠΎΠΉ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Π΅ синуса Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ измСрСния 0.707.*/
    dtmf_cfg.interval=0.;
    dtmf_cfg.repeat_count=0.;

   /* Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. */
   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM, (void*)&dtmf_cfg);

   /* Π”Π°Π΅ΠΌ, врСмя ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ сСкунды, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅Π»ΡŒ Π½Π°ΠΊΠΎΠΏΠΈΠ» Π΄Π°Π½Π½Ρ‹Π΅. */
   ms_usleep(500000);

   /* Π§ΠΈΡ‚Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ измСрСния. */
  float level=0;
   ms_filter_call_method(volume, MS_VOLUME_GET_LINEAR,&level);
   printf("АмплитудС синуса %f Π²ΠΎΠ»ΡŒΡ‚  соотвСтствуСт срСднСквадратичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ %f Π²ΠΎΠ»ΡŒΡ‚.n", dtmf_cfg.amplitude, level);
}

Isu tinonyora muenzaniso wedu, sezvatakaita kare, tichingoshandisa zita refaira mstest3. Ngatimhanyei uye titore mhedzisiro:

АмплитудС синуса 1.000000 Π²ΠΎΠ»ΡŒΡ‚  соотвСтствуСт срСднСквадратичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.707733 Π²ΠΎΠ»ΡŒΡ‚.

Sezvauri kuona, mugumisiro wekuyera wakapindirana nenzvimbo yechitatu yedesimali ine kukosha kwedzidziso yakaenzana neskweya mudzi wezvikamu zviviri zvakakamurwa nepakati: sqr(2)/2=0,7071067811865475

Kutsauswa kwehukama kwemhedzisiro kubva paukoshi hwechokwadi hwaive 0.1%. Takaongorora chikanganiso chekuyera pachiyero chechiratidzo chepamusoro. Saizvozvowo, sezvo chiyero chinoderera, kukanganisa kunofanira kuwedzera. Ini ndinokurudzira kuti uzviongorore iwe pachako kune yakaderera masaini mazinga.

Muchinyorwa chinotevera tichaunganidza dunhu rinoona kuvepo kwechiratidzo chetoni yenguva yakapihwa painopinza uchishandisa toni detector. Isu tichadzidzawo maitiro ekugadzirisa zviitiko zvinogadzirwa nemasefa.

Source: www.habr.com

Voeg