āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻāĻĒāĻžāĻĻāĻžāĻ¨ āĻāĻŽāĻžāĻ° āĻĨā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§
āĻā§āĻ¨ āĻĄāĻŋāĻā§āĻā§āĻāĻ°
āĻļā§āĻˇā§
āĻĒā§āĻ°āĻžāĻ¨ā§ āĻĻāĻŋāĻ¨ā§, āĻ¯āĻāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻāĻŋ āĻāĻŋāĻ˛ āĻ¨āĻž, āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ āĻ°ā§āĻ§ā§āĻāĻ āĻĒā§āĻ˛āĻžāĻ¯āĻŧāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ āĻĒāĻžāĻ˛ā§āĻā§āĻāĻŋāĻ˛, āĻ¤āĻāĻ¨ āĻŦāĻŋāĻĻā§āĻļā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻāĻ¤ āĻĒā§āĻ°ā§āĻ¸ā§āĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻžāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻŽāĻāĻĒā§āĻ°āĻĻ āĻāĻŦāĻ° āĻĒā§āĻ°āĻāĻžāĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻāĻāĻāĻŋ āĻāĻŋāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž āĻ¤āĻžāĻĻā§āĻ° āĻĄāĻŋāĻāĻžāĻāĻ¸āĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¤āĻžāĻ° āĻ°āĻŋāĻŽā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¸āĻā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻā§āĨ¤ āĻŦāĻŋāĻļāĻĻ āĻĨā§āĻā§ āĻāĻāĻŋ āĻāĻžāĻ¨āĻž āĻāĻŋāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻ°āĻŋāĻŽā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻāĻŋ āĻŦā§āĻ¯āĻžāĻāĻžāĻ°āĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻāĻāĻŋ āĻ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ - āĻ°āĻŋāĻŽā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛āĻāĻŋ āĻ¯āĻžāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻžāĻĻā§āĻ¯āĻ¯āĻ¨ā§āĻ¤ā§āĻ°ā§āĻ° āĻ¸āĻāĻāĻ° āĻāĻŋāĻ˛ - āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻ˛ā§āĻĢā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ°āĻŋāĻāĻ˛āĻāĻžāĻ°āĨ¤ āĻ°āĻŋāĻāĻ˛āĻāĻžāĻ°ā§āĻ° āĻĄā§āĻ°āĻžāĻŽā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĻā§āĻ°ā§āĻā§āĻ¯ā§āĻ° āĻ§āĻžāĻ¤āĻŦ āĻ¸āĻŋāĻ˛āĻŋāĻ¨ā§āĻĄāĻžāĻ° āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻ¯āĻāĻ¨ āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻŋāĻ āĻĒāĻŋāĻ¨āĻāĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻāĻāĻŋāĻ¤ā§ āĻāĻāĻžāĻ¤ āĻāĻ°ā§ āĻ¤āĻāĻ¨ āĻ¸āĻŋāĻ˛āĻŋāĻ¨ā§āĻĄāĻžāĻ°āĻāĻŋ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋāĻ¤ā§ āĻŦāĻžāĻāĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°ā§āĨ¤ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻ˛ā§āĻā§āĻ°āĻžāĻ¸āĻžāĻāĻ¨ā§āĻĄā§āĨ¤ āĻāĻŋāĻāĻŋāĻ¤ā§ āĻĨāĻžāĻāĻž āĻāĻ˛ā§āĻāĻā§āĻ°āĻ¨āĻŋāĻā§āĻ¸āĻā§āĻ˛āĻŋ āĻāĻ āĻ¸āĻāĻā§āĻ¤āĻāĻŋ āĻļā§āĻ¨ā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻ° āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§ āĻ¯āĻĨāĻžāĻ¯āĻĨ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻāĻ°ā§āĻā§ - āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛āĻāĻŋ āĻ¸ā§āĻ¯ā§āĻāĻ āĻāĻ°ā§āĻ¨, āĻāĻ˛āĻŋāĻāĻŽ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§āĻ¨, āĻāĻŋāĻāĻŋ āĻŦāĻ¨ā§āĻ§ āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻ āĻāĻŽāĻ°āĻž āĻŽāĻŋāĻĄāĻŋāĻ¯āĻŧāĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻŽāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻāĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻļāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻāĻŋ āĻĒā§āĻ¨āĻ°ā§āĻāĻ āĻ¨ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦāĨ¤
āĻāĻāĻāĻŋ āĻ°āĻŋāĻŽā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛ āĻ āĻ¨ā§āĻāĻ°āĻŖ āĻāĻ°āĻ¤ā§, āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ¨ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻĒāĻžāĻ ā§āĻ¯āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻ¤ā§ āĻā§āĻ¸ā§āĻā§āĻ°ā§āĻ āĻĨā§āĻā§ āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°ā§āĻ° āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻĄāĻŋāĻā§āĻĄāĻžāĻ° āĻ¸āĻš āĻāĻāĻāĻŋ āĻ°āĻŋāĻ¸āĻŋāĻāĻžāĻ° āĻ¯ā§āĻ āĻāĻ°āĻŦ āĻ¯āĻž āĻāĻ¨āĻ¸ā§āĻ˛ā§ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻāĻāĻĒā§āĻ āĻāĻ°āĻŦā§āĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻĒāĻ°ā§, āĻā§āĻ¨āĻžāĻ°ā§āĻāĻ°ā§āĻ° 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āĻāĻŋ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ āĻāĻāĻāĻŋ āĻĄāĻŋāĻā§āĻā§āĻāĻ°āĻā§ āĻĻāĻļāĻāĻŋ āĻĻā§āĻŦāĻŋ-āĻā§āĻ¨ āĻ¸āĻāĻā§āĻ¤ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ¯āĻŧāĻāĻŋ āĻāĻāĻ-āĻā§āĻ¨ āĻ¸āĻāĻā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻĄāĻŋāĻā§āĻā§āĻāĻ°ā§ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§, MS_TONE_DETECTOR_ADD_SCAN āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻŦāĻšāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¯ā§ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ āĻĢā§āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¨ā§āĻ¸āĻŋ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ¤ āĻ¤āĻžāĻ° āĻāĻ¨āĻĒā§āĻā§ āĻāĻ¸ā§āĻā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻ˛āĻŦā§āĻ¯āĻžāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯āĻž āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻžāĻ˛ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧ ms_filter_set_notify_callback(). āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ°, āĻāĻ˛āĻŦā§āĻ¯āĻžāĻ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ° āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻāĻ˛āĻŦā§āĻ¯āĻžāĻ āĻĢāĻžāĻāĻļāĻ¨ā§ (āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĄā§āĻāĻž) āĻĒāĻžāĻ¸ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻāĻŽāĻ¨ āĻĄā§āĻāĻžāĻ° āĻāĻāĻāĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ° āĻĒāĻžāĻ¯āĻŧāĨ¤
āĻ¯āĻāĻ¨ āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻā§āĻ°āĻŋāĻāĻžāĻ° āĻšāĻ¯āĻŧ, āĻāĻ˛āĻŦā§āĻ¯āĻžāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĄā§āĻāĻž, āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ°, āĻāĻāĻāĻŋ āĻāĻā§āĻ¨ā§āĻ āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻžāĻ°ā§ āĻāĻŦāĻ āĻāĻā§āĻ¨ā§āĻ āĻŦāĻ°ā§āĻŖāĻ¨āĻžāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻŦā§:
/** * 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
$
āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻŋ āĻ¯ā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻā§āĻ¨ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻĄāĻŋāĻā§āĻā§āĻāĻ° āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°ā§āĨ¤
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻ°āĻž RTP āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻĨāĻžāĻ°āĻ¨ā§āĻ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻāĻŋ āĻ āĻĄāĻŋāĻ āĻ¸āĻāĻā§āĻ¤ āĻĒā§āĻ°ā§āĻ°āĻŖā§āĻ° āĻĻāĻŋāĻā§ āĻĢāĻŋāĻ°ā§ āĻ¯āĻžāĻŦ āĻāĻŦāĻ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ°āĻŋāĻŽā§āĻ āĻāĻ¨ā§āĻā§āĻ°ā§āĻ˛ā§ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻŦāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com