เชฒเซเชเชจเซ เชธเชพเชฎเชเซเชฐเซ เชฎเชพเชฐเชพ เชชเชฐเชฅเซ เชฒเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ .
เชธเชฟเชเซเชจเชฒ เชฒเซเชตเชฒ เชฎเซเชเชฐ เชฌเชจเชพเชตเชตเซเช
เชเซเชฒเซเชฒเชพเชฎเชพเช เช เชฎเซ เชฎเซเชกเชฟเชฏเชพ เชธเซเชเซเชฐเซเชฎเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเชพ เชฏเซเชเซเชฏ เชธเชฎเชพเชชเซเชคเชฟเชจเซ เชธเซเชชเชทเซเชเชคเชพ เชเชฐเซ เชเซ.
เช เชฒเซเชเชฎเชพเช เชเชชเชฃเซ เชธเชฟเชเซเชจเชฒ เชฒเซเชตเชฒ เชฎเซเชเชฐ เชธเชฐเซเชเชฟเช เชเชธเซเชฎเซเชฌเชฒ เชเชฐเซเชถเซเช เช เชจเซ เชซเชฟเชฒเซเชเชฐเชฎเชพเชเชฅเซ เชฎเชพเชชเชจ เชชเชฐเชฟเชฃเชพเชฎ เชเซเชตเซ เชฐเซเชคเซ เชตเชพเชเชเชตเซเช เชคเซ เชถเซเชเซเชถเซเช. เชเชพเชฒเซ เชฎเชพเชชเชจเชจเซ เชเซเชเชธเชพเชเชจเซเช เชฎเซเชฒเซเชฏเชพเชเชเชจ เชเชฐเซเช.
เชฎเซเชกเชฟเชฏเชพ เชธเซเชเซเชฐเซเชฎเชฐ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฒ เชซเชฟเชฒเซเชเชฐเซเชธเชจเชพ เชธเชฎเซเชนเชฎเชพเช เชซเชฟเชฒเซเชเชฐ, MS_VOLUME เชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ, เชเซ เชคเซเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชคเชพ เชธเชฟเชเซเชจเชฒเชจเชพ RMS เชธเซเชคเชฐเชจเซ เชฎเชพเชชเชตเชพ, เชธเชฟเชเซเชจเชฒเชจเซ เชเชเซเช เชเชฐเชตเชพ เช เชจเซ เชเชฃเชพเช เชเชชเชฏเซเชเซ เช เชจเซ เช เชฃเชงเชพเชฐเซเชฏเชพ เชเชพเชฐเซเชฏเซ เชเชฐเชตเชพ เชธเชเซเชทเชฎ เชเซ. เช เชฎเซ เชชเชเซเชฅเซ เช เชซเชฟเชฒเซเชเชฐ เชฎเชพเชเซ เชเชเซ เชฒเซเช เชธเชฎเชฐเซเชชเชฟเชค เชเชฐเซเชถเซเช. เชชเชฐเชเชคเซ เช เชคเซเชฏเชพเชฐเซ เช เชฎเซ เชคเซเชจเซ เชเชชเชฏเซเช เชฎเซเชเชฐ เชคเชฐเซเชเซ เชเชฐเซเชถเซเช.
เช เชฎเซ เชธเชฟเชเซเชจเชฒ เชธเซเชคเซเชฐเซเชค เชคเชฐเซเชเซ เชเซเชจ เชเชจเชฐเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช, เชเซเชฎเชพเชเชฅเซ เชธเชฟเชเซเชจเชฒ MS_VOLUME เชซเชฟเชฒเซเชเชฐ เชชเชฐ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเชถเซ, เชเซเชฎเชพเชเชฅเซ เชธเชพเชเชจเซเชก เชเชพเชฐเซเชก เชเซเชกเชพเชฏเซเชฒ เชเซ เชคเซ เชเชเชเชชเซเช เชชเชฐ.
เช เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เช เชฎเซ เชเชจเชฐเซเชเชฐ เชซเชฟเชฒเซเชเชฐเชจเซ เชเชชเชฏเซเช เชฅเซเชกเซ เช เชฒเช เชฎเซเชกเชฎเชพเช เชเชฐเซเชถเซเช - เชคเซ เช เชฎเชพเชฐเชพ เชฎเชพเชเซ เชธเชฟเชเชเชฒ-เชเซเชจ เชธเชฟเชเซเชจเชฒ เชเชจเชฐเซเช เชเชฐเชถเซ, เชเชเชฒเซ เชเซ. เชเช เชธเชฟเชเซเชจเชฒ เชเซเชฎเชพเช เชฎเชพเชคเซเชฐ เชเช เช เชธเชฟเชจเซเชธเซเชเชกเชฒ เชเชธเชฟเชฒเซเชถเชจ เชนเซเชฏ เชเซ.
เชเชตเชฐเซเชคเชจ เช เชจเซ เชเชเชชเชจเชตเชฟเชธเซเชคเชพเชฐ เชเชชเชฐเชพเชเชค, เช เชฎเชจเซ เชคเซ เชธเชฎเชฏ เชธเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ เชเซ เชเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฟเชเซเชจเชฒ เชเชจเชฐเซเช เชฅเชถเซ; เชเชจเชฐเซเชเชฐ เชชเชฐ เชธเซเชเชฟเชเชเซเชธ เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, MSDtmfGenCustomTone เชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ:
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;เชเชจเชฐเซเชเชฐ เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เช เชฎเซ เชคเซเชจเซ MS_DTMF_GEN_PLAY_CUSTOM เชชเชฆเซเชงเชคเชฟเชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช.
เชธเชฟเชเซเชจเชฒ เชชเซเชฐเซเชธเซเชธเชฟเชเชเชจเซ เชฌเซเชฒเซเช เชกเชพเชฏเชพเชเซเชฐเชพเชฎ:
![]()
เชชเซเชฐเซเชเซเชฐเชพเชฎ เชเซเชก เชเซ เช เชฏเซเชเชจเชพเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเซ เชเซ เชคเซ เชจเซเชเซ เชฆเชฐเซเชถเชพเชตเซเชฒ เชเซ.
/* ะคะฐะนะป 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);
}เช เชฎเซ เช เชฎเชพเชฐเซเช เชเชฆเชพเชนเชฐเชฃ เชเชฎเซเชชเชพเชเชฒ เชเชฐเซเช เชเซเช, เชเซเชฎ เชเชชเชฃเซ เชชเชนเซเชฒเชพ เชเชฐเซเชฏเซเช เชนเชคเซเช, เชซเชเซเชค เชซเชพเชเชฒเชจเชพ เชจเชพเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ mstest3. เชเชพเชฒเซ เชคเซเชจเซ เชเชฒเชพเชตเซเช เช เชจเซ เชชเชฐเชฟเชฃเชพเชฎ เชฎเซเชณเชตเซเช:
ะะผะฟะปะธััะดะต ัะธะฝััะฐ 1.000000 ะฒะพะปัั ัะพะพัะฒะตัััะฒัะตั ััะตะดะฝะตะบะฒะฐะดัะฐัะธัะตัะบะพะต ะทะฝะฐัะตะฝะธะต 0.707733 ะฒะพะปัั.เชเซเชฎ เชคเชฎเซ เชเซเช เชถเชเซ เชเซ, เชฎเชพเชชเชจ เชชเชฐเชฟเชฃเชพเชฎ เชคเซเชฐเซเชเซ เชฆเชถเชพเชเชถ เชธเซเชฅเชพเชจ เชธเชพเชฅเซ เชฎเซเชณ เชเชพเชฏ เชเซ เช เชจเซ เชธเซเชฆเซเชงเชพเชเชคเชฟเช เชฎเซเชฒเซเชฏ เชฌเซ เชจเชพ เชตเชฐเซเชเชฎเซเชณเชจเซ เช เชกเชงเชพ เชญเชพเชเชฎเชพเช เชตเชนเซเชเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ: sqr(2)/2=0,7071067811865475
เชธเชพเชเชพ เชฎเซเชฒเซเชฏเชฎเชพเชเชฅเซ เชชเชฐเชฟเชฃเชพเชฎเชจเซเช เชธเชเชฌเชเชงเชฟเชค เชตเชฟเชเชฒเชจ 0.1% เชนเชคเซเช. เช เชฎเซ เชฎเชนเชคเซเชคเชฎ เชธเชฟเชเซเชจเชฒ เชธเซเชคเชฐเซ เชฎเชพเชชเชจ เชญเซเชฒเชจเซเช เชฎเซเชฒเซเชฏเชพเชเชเชจ เชเชฐเซเชฏเซเช. เชคเชฆเชจเซเชธเชพเชฐ, เชธเซเชคเชฐ เชเชเซ เชคเซเชฎ, เชญเซเชฒ เชตเชงเชตเซ เชเซเชเช. เชนเซเช เชธเซเชเชจ เชเชฐเซเช เชเซเช เชเซ เชคเชฎเซ เชจเซเชเชพ เชธเชฟเชเซเชจเชฒ เชธเซเชคเชฐเซ เชฎเชพเชเซ เชคเซเชจเซเช เชเชพเชคเซ เชฎเซเชฒเซเชฏเชพเชเชเชจ เชเชฐเซ.
เชนเชตเซ เชชเชเซเชจเชพ เชฒเซเชเชฎเชพเช เชเชชเชฃเซ เชเช เชธเชฐเซเชเชฟเช เชเชธเซเชฎเซเชฌเชฒ เชเชฐเซเชถเซเช เชเซ เชเซเชจ เชกเชฟเชเซเชเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชจเชชเซเช เชชเชฐ เชเชชเซเชฒ เชซเซเชฐเซเชเซเชตเชจเซเชธเซเชจเชพ เชเซเชจ เชธเชฟเชเซเชจเชฒเชจเซ เชนเชพเชเชฐเซ เชถเซเชงเซ เชเชพเชขเซ เชเซ. เชซเชฟเชฒเซเชเชฐ เชฆเซเชตเชพเชฐเชพ เชเชจเชฐเซเช เชฅเชคเซ เชเชเชจเชพเชเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชชเซเชฐเซเชธเซเชธ เชเชฐเชตเซ เชคเซ เชชเชฃ เชถเซเชเซเชถเซเช.
เชธเซเชฐเซเชธ: www.habr.com
