ΠΠ°ΡΠ΅ΡΠΈΡΠ°Π» ΡΠ»Π°Π½ΠΊΠ° ΡΠ΅ ΠΏΡΠ΅ΡΠ·Π΅Ρ ΡΠ° ΠΌΠΎΠ³ .
ΠΠ΅ΡΠ΅ΠΊΡΠΎΡ ΡΠΎΠ½Π°
Π£ ΠΏΠΎΡΠ»Π΅Π΄ΡΠΈΡ ΠΠ°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ ΠΌΠ΅ΡΠ°Ρ Π½ΠΈΠ²ΠΎΠ° ΡΠΈΠ³Π½Π°Π»Π°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΌΠΎ Π½Π°ΡΡΠΈΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π΄Π΅ΡΠ΅ΠΊΡΡΡΠ΅ΠΌΠΎ ΡΠΎΠ½ΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π».
![]()
Π£ ΡΡΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π°, ΠΊΠ°Π΄Π° Π½ΠΈΡΠ΅ ΡΠ²Π°ΠΊΠ° ΠΏΠΎΡΠΎΠ΄ΠΈΡΠ° ΠΈΠΌΠ°Π»Π° ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡ, Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠΈΡ ΠΌΠ΅ΡΠ°Π»Π° ΠΊΠ°Π½Π°Π»Π΅ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠ»Π΅ΡΡΠ°, Ρ ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΠ°ΠΌΠ° ΡΡΡΠ°Π½Π΅ ΡΠ΅Ρ Π½ΠΈΡΠΊΠ΅ ΡΡΠ°ΠΌΠΏΠ΅ ΠΏΠΎΡΠ°Π²ΠΈΠ»Π΅ ΡΡ ΡΠ΅ ΠΈΠ½ΡΡΠΈΠ³Π°Π½ΡΠ½Π΅ Π²Π΅ΡΡΠΈ Π΄Π° ΡΠ΅ ΡΠ΅Π΄Π°Π½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΡΠ°Ρ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡΠ° ΠΎΠΏΡΠ΅ΠΌΠΈΠΎ ΡΠ²ΠΎΡΠ΅ ΡΡΠ΅ΡΠ°ΡΠ΅ Π±Π΅ΠΆΠΈΡΠ½ΠΈΠΌ Π΄Π°ΡΠΈΠ½ΡΠΊΠΈΠΌ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ΠΌ. ΠΠ· Π΄Π΅ΡΠ°ΡΠ° ΡΠ΅ Π·Π½Π°Π»ΠΎ Π΄Π° ΡΠ΅ Π΄Π°ΡΠΈΠ½ΡΠΊΠΈ ΡΠΏΡΠ°Π²ΡΠ°Ρ ΡΠ°Π΄ΠΈΠΎ Π±Π΅Π· Π±Π°ΡΠ΅ΡΠΈΡΠ° Π·Π°Ρ Π²Π°ΡΡΡΡΡΠΈ ΡΠΏΠΎΡΡΠ΅Π±ΠΈ Π½Π΅ΠΎΠ±ΠΈΡΠ½ΠΎΠ³ ΠΏΡΠΈΡΡΡΠΏΠ° - Π΄Π°ΡΠΈΠ½ΡΠΊΠΈ ΡΠΏΡΠ°Π²ΡΠ°Ρ ΡΠ΅ Π±ΠΈΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠΊΠΈ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ°ΠΎ ΡΠ΅ Ρ ΠΈΠ±ΡΠΈΠ΄ ΠΌΡΠ·ΠΈΡΠΊΠΎΠ³ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° - ΠΌΠ΅ΡΠ°Π»ΠΎΡΠΎΠ½Π° ΠΈ ΡΠ΅Π²ΠΎΠ»Π²Π΅ΡΠ°. Π£ Π±ΡΠ±ΡΡ ΡΠ΅Π²ΠΎΠ»Π²Π΅ΡΠ° Π½Π°Π»Π°Π·ΠΈΠ»ΠΈ ΡΡ ΡΠ΅ ΠΌΠ΅ΡΠ°Π»Π½ΠΈ ΡΠΈΠ»ΠΈΠ½Π΄ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π΄ΡΠΆΠΈΠ½Π΅, Π° ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠ΄Π°ΡΠ½Π° ΠΈΠ³Π»Π° ΡΠ΄Π°ΡΠΈΠ»Π° Ρ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ ΡΠΈΡ , ΡΠΈΠ»ΠΈΠ½Π΄Π°Ρ ΡΠ΅ ΠΏΠΎΡΠ΅ΠΎ Π΄Π° Π·Π²ΠΎΠ½ΠΈ Π½Π° ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΎΡ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠΈ. ΠΠ΅ΡΠΎΠ²Π°ΡΠ½ΠΎ Π½Π° ΡΠ»ΡΡΠ°Π·Π²ΡΠΊΡ. ΠΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ° Ρ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡΡ ΡΠ΅ ΡΡΠ»Π° ΠΎΠ²Π°Ρ ΡΠΈΠ³Π½Π°Π» ΠΈ, Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ΅ ΠΎΠ΄ΡΠ΅Π΄ΠΈΠ»Π° ΡΠ΅Π³ΠΎΠ²Ρ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΡ, ΠΈΠ·Π²ΡΡΠΈΠ»Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΡ Π°ΠΊΡΠΈΡΡ - ΠΏΡΠ΅Π±Π°ΡΠΈΡΠ΅ ΠΊΠ°Π½Π°Π», ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°ΡΠΈΠ½Ρ Π·Π²ΡΠΊΠ°, ΠΈΡΠΊΡΡΡΠΈΡΠ΅ Π’Π.
ΠΠ°Π½Π°Ρ ΡΠ΅ΠΌΠΎ ΠΏΠΎΠΊΡΡΠ°ΡΠΈ Π΄Π° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ΅ΠΌΠΎ ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠ΅Π½ΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π½Π°ΡΠ΅ Π·Π½Π°ΡΠ΅ ΠΎ ΠΌΠ΅Π΄ΠΈΡΡΠΊΠΎΠΌ ΡΡΡΠΈΠΌΠ΅ΡΡ.
ΠΠ° Π±ΠΈΡΠΌΠΎ ΡΠΈΠΌΡΠ»ΠΈΡΠ°Π»ΠΈ Π΄Π°ΡΠΈΠ½ΡΠΊΠΈ ΡΠΏΡΠ°Π²ΡΠ°Ρ, ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ΅ΠΊΡΡ Π½Π°ΡΠ΅Π³ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΡΠΎΠ½Π°. ΠΠΎΠ΄Π°ΡΠ΅ΠΌΠΎ ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΈΡΠΈΡΠΊΠΎΠΌ Π½Π° ΡΠ°ΡΡΠ΅ΡΠ΅ ΠΈ ΠΏΡΠΈΡΠ΅ΠΌΠ½ΠΈΠΊ ΡΠ° Π΄Π΅ΠΊΠΎΠ΄Π΅ΡΠΎΠΌ ΠΊΠΎΡΠΈ ΡΠ΅ Π΅ΠΌΠΈΡΠΎΠ²Π°ΡΠΈ ΠΏΡΠΈΠΌΡΠ΅Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Ρ. ΠΠ°ΠΊΠΎΠ½ ΠΏΡΠΎΠΌΠ΅Π½Π΅, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΡΠΎΠ½ΠΎΠ²Π΅ ΠΎΠ΄ 6 ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°, ΠΊΠΎΡΠΈΠΌΠ° ΡΠ΅ΠΌΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ°ΡΠ΅/ΡΠΌΠ°ΡΠ΅ΡΠ΅ ΡΠ°ΡΠΈΠ½Π΅ Π·Π²ΡΠΊΠ°, ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΊΠ°Π½Π°Π»Π°, ΡΠΊΡΡΡΠΈΠ²Π°ΡΠ΅/ΠΈΡΠΊΡΡΡΠΈΠ²Π°ΡΠ΅ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡΠ°. ΠΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ° ΡΡΡΡΠΊΡΡΡΠ°:
struct _MSToneDetectorDef{
char tone_name[8];
int frequency; /**<Expected frequency of the tone*/
int min_duration; /**<Min duration of the tone in milliseconds */
float min_amplitude; /**<Minimum amplitude of the tone, 1.0 corresponding to the normalized 0dbm level */
};
typedef struct _MSToneDetectorDef MSToneDetectorDef;ΠΠ΅ΡΠ΅ΠΊΡΠΎΡΡ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π°ΡΠΈ 10 ΠΎΠ²ΠΈΡ ΡΡΡΡΠΊΡΡΡΠ°, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΠ΅Π΄Π°Π½ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠΈ Π΄Π° Π΄Π΅ΡΠ΅ΠΊΡΡΡΠ΅ Π΄Π΅ΡΠ΅Ρ Π΄Π²ΠΎΡΠΎΠ½ΡΠΊΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ°ΠΌΠΎ ΡΠ΅ΡΡ ΡΠ΅Π΄Π½ΠΎΡΠΎΠ½ΡΠΊΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠ° ΠΏΡΠ΅Π½ΠΎΡ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° Π½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΠ‘_Π’ΠΠΠ_ΠΠΠ’ΠΠ¦Π’ΠΠ _ΠΠΠ_Π‘Π¦ΠΠ.
ΠΠ° Π±ΠΈ Π½Π°Ρ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΠΎΠ±Π°Π²Π΅ΡΡΠΈΠΎ Π΄Π° ΡΠ΅ Π½Π° ΡΠ΅Π³ΠΎΠ² ΡΠ»Π°Π· ΡΡΠΈΠ³Π°ΠΎ ΡΠΈΠ³Π½Π°Π» ΡΠ° ΠΆΠ΅ΡΠ΅Π½ΠΈΠΌ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠ½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠ°, ΠΌΠΎΡΠ°ΠΌΠΎ ΠΌΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡΠΈ ΡΠ°Π»Π»Π±Π°ΡΠΊ ΡΡΠ½ΠΊΡΠΈΡΡ ΠΊΠΎΡΡ ΡΠ΅ Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ. ΠΠ²ΠΎ ΡΠ΅ ΡΠ°Π΄ΠΈ ΠΏΠΎΠΌΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΠΌΡ_ΡΠΈΠ»ΡΠ΅Ρ_ΡΠ΅Ρ_Π½ΠΎΡΠΈΡΠΈ_ΡΠ°Π»Π»Π±Π°ΡΠΊ(). ΠΠ°ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅, ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ Π½Π° ΡΠΈΠ»ΡΠ΅Ρ, ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° ΠΈ ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΊΠΎΡΠ΅ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΈ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° (ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ ΠΏΠΎΠ΄Π°ΡΠΈ).
ΠΠ°Π΄Π° ΡΠ΅ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°, ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅, ΠΏΠΎΠΊΠ°Π·ΠΈΠ²Π°Ρ Π½Π° ΡΠΈΠ»ΡΠ΅Ρ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄ΠΎΠ³Π°ΡΠ°ΡΠ° ΠΈ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΡΠ° ΠΎΠΏΠΈΡΡΡΠ΅ Π΄ΠΎΠ³Π°ΡΠ°Ρ:
/** * Structure carried as argument of the MS_TONE_DETECTOR_EVENT**/
struct _MSToneDetectorEvent{
char tone_name[8]; /* ΠΠΌΡ ΡΠΎΠ½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Π΅ΠΌΡ Π½Π°Π·Π½Π°ΡΠΈΠ»ΠΈ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ°. */
uint64_t tone_start_time; /* ΠΡΠ΅ΠΌΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ½ Π±ΡΠ» ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½. */
};
typedef struct _MSToneDetectorEvent MSToneDetectorEvent;
ΠΠ»ΠΎΠΊ ΡΠ΅ΠΌΠ° ΠΎΠ±ΡΠ°Π΄Π΅ ΡΠΈΠ³Π½Π°Π»Π° ΡΠ΅ ΠΏΡΠΈΠΊΠ°Π·Π°Π½Π° Π½Π° Π½Π°ΡΠ»ΠΎΠ²Π½ΠΎΡ ΡΠ»ΠΈΡΠΈ.
ΠΠ°, ΡΠ°Π΄Π° ΡΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΠΊΠΎΠ΄ ΡΠ° ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ°.
/* Π€Π°ΠΉΠ» mstest4.c ΠΠΌΠΈΡΠ°ΡΠΎΡ ΠΏΡΠ»ΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/msvolume.h>
#include <mediastreamer2/mstonedetector.h>
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ
* ΠΌΠ΅Π΄ΠΈΠ°ΡΡΡΠΈΠΌΠ΅ΡΠ°. */
#include <mediastreamer2/mseventqueue.h>
/* Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΠΈΠ»ΡΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ½
* ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ Π²Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ. */
static void tone_detected_cb(void *data, MSFilter *f, unsigned int event_id,
MSToneDetectorEvent *ev)
{
printf(" ΠΡΠΈΠ½ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°: %sn", ev->tone_name);
}
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);
MSFilter *detector = ms_filter_new(MS_TONE_DETECTOR_ID);
/* ΠΡΠΈΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²Π½ΡΡΡΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° ΡΠΎΠ½ΠΎΠ², ΠΎΠ½ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ
* ΠΎΡΠΎΠ±ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π·ΡΡΠΊΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΈΠ³Π½Π°Π»ΠΎΠ².*/
ms_filter_call_method(detector, MS_TONE_DETECTOR_CLEAR_SCANS, 0);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΎΠ² - ΡΠΈΠΊΠ΅Ρ. */
MSTicker *ticker=ms_ticker_new();
/* Π‘ΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΡΠΊΡ. */
ms_filter_link(voidsource, 0, dtmfgen, 0);
ms_filter_link(dtmfgen, 0, volume, 0);
ms_filter_link(volume, 0, detector, 0);
ms_filter_link(detector, 0, snd_card_write, 0);
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΊ ΡΠΈΠ»ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. */
ms_filter_set_notify_callback(detector,
(MSFilterNotifyFunc)tone_detected_cb, NULL);
/* ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΎΠ². */
ms_ticker_attach(ticker,voidsource);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΡ
* ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ: Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ
* Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠ°ΡΡΠΎΡΠ° Π² Π³Π΅ΡΡΠ°Ρ
, Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
,
* ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ 0,775Π. */
MSToneDetectorDef scan[6]=
{
{"V+", 440, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£Π²Π΅Π»ΠΈΡΠΈΡΡ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ". */
{"V-", 540, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£ΠΌΠ΅Π½ΡΡΠΈΡΡ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ". */
{"C+", 640, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£Π²Π΅Π»ΠΈΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π°". */
{"C-", 740, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "Π£ΠΌΠ΅Π½ΡΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π°". */
{"ON", 840, 100, 0.1}, /* ΠΠΎΠΌΠ°Π½Π΄Π° "ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡ". */
{"OFF", 940, 100, 0.1} /* ΠΠΎΠΌΠ°Π½Π΄Π° "ΠΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΈΠ·ΠΎΡ". */
};
/* ΠΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π² Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΡΠΎΠ½ΠΎΠ² ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ². */
int i;
for (i = 0; i < 6; i++)
{
ms_filter_call_method(detector, MS_TONE_DETECTOR_ADD_SCAN,
&scan[i]);
}
/* ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΡ
ΠΎΠ΄Π½ΡΠΌ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°.*/
MSDtmfGenCustomTone dtmf_cfg;
dtmf_cfg.tone_name[0] = 0;
dtmf_cfg.duration = 1000;
dtmf_cfg.frequencies[0] = 440;
/* ΠΡΠ΄Π΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ½, ΡΠ°ΡΡΠΎΡΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π² 0.*/
dtmf_cfg.frequencies[1] = 0;
dtmf_cfg.amplitude = 1.0;
dtmf_cfg.interval = 0.;
dtmf_cfg.repeat_count = 0.;
/* ΠΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ» ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΡΡ
ΠΊΠ»Π°Π²ΠΈΡ. ΠΠ²ΠΎΠ΄ Π½ΡΠ»Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ
* ΡΠΈΠΊΠ» ΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. */
char key='9';
printf("ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΡΠ΅ΠΌ Π²Π²ΠΎΠ΄.n"
"ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π²Π΅Π΄ΠΈΡΠ΅ 0.n");
while(key != '0')
{
key = getchar();
if ((key >= 49) && (key <= 54))
{
printf("ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: %cn", key);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΡΡΠΎΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ
* ΠΊΠΎΠ΄ΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ.*/
dtmf_cfg.frequencies[0] = 440 + 100*(key-49);
/* ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π²ΡΠΊΠΎΠ²ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ c ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ. */
ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM,
(void*)&dtmf_cfg);
}
ms_usleep(20000);
}
}Π‘Π°ΡΡΠ°Π²ΡΠ°ΠΌΠΎ ΠΈ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΠΌΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌ. ΠΠΊΠΎ ΡΠ²Π΅ ΡΠ°Π΄ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠ΅Π±Π°, ΠΎΠ½Π΄Π° Π±ΠΈ Π½Π°ΠΊΠΎΠ½ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ Π½Π΅ΡΡΠΎ ΠΏΠΎΠΏΡΡ ΠΎΠ²Π°ΠΊΠ²ΠΎΠ³ ΠΏΠΎΠ½Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°:
$ ./mstest4
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Invalid CTL default:0
ortp-warning-Could not attach mixer to card: Invalid argument
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ortp-warning-Strange, sound card Intel 82801AA-ICH does not seems to be capable of anything, retrying with plughw...
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π·Π°ΡΠ΅ΠΌ Π²Π²ΠΎΠ΄.
ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π²Π΅Π΄ΠΈΡΠ΅ 0.
ortp-warning-alsa_set_params: periodsize:256 Using 256
ortp-warning-alsa_set_params: period:8 Using 8
ΠΡΠΈΡΠΈΡΠ½ΠΈΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠΈ ΡΠ°ΡΡΠ΅Ρ ΠΎΠ΄ "1" Π΄ΠΎ "6", ΠΏΠΎΡΠ²ΡΡΡΡΡΡΠΈ ΡΠ°ΡΡΠ΅ΡΠΎΠΌ "ΠΠ½ΡΠ΅Ρ", ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ Π½Π΅ΡΡΠΎ ΠΏΠΎΠΏΡΡ ΠΎΠ²Π΅ Π»ΠΈΡΡΠ΅:
2
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: 2
ΠΡΠΈΠ½ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°: V-
1
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: 1
ΠΡΠΈΠ½ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°: V+
3
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: 3
ΠΡΠΈΠ½ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°: C+
4
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°: 4
ΠΡΠΈΠ½ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°: C-
0
$ΠΠΈΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π°ΡΠΈ ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΠΈΡ Π΄Π΅ΡΠ΅ΠΊΡΡΡΠ΅.
Π£ ΡΠ»Π΅Π΄Π΅ΡΠ΅ΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ ΡΠ΅ ΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΏΡΠ΅Π½ΠΎΡΡ Π°ΡΠ΄ΠΈΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΠΏΡΠ΅ΠΊΠΎ ΠΡΡ Π΅ΡΠ½Π΅Ρ ΠΌΡΠ΅ΠΆΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π Π’Π ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ ΠΎΠ΄ΠΌΠ°Ρ Π³Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ Ρ Π½Π°ΡΠ΅ΠΌ Π΄Π°ΡΠΈΠ½ΡΠΊΠΎΠΌ ΡΠΏΡΠ°Π²ΡΠ°ΡΡ.
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ
