Changeset 5547:3f5d08ba722e in roaraudio


Ignore:
Timestamp:
06/17/12 16:17:06 (5 years ago)
Author:
phi
Branch:
default
Message:

added an extended DTMF mode

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • include/libroardsp/dtmf.h

    r5546 r5547  
    4141#define ROAR_DTMF_OPTIONS_NONE 0 
    4242 
     43#define ROAR_DTMF_CHAR_DTMF(x) (((x) & 0xFF) + 0x0000) 
     44#define ROAR_DTMF_CHAR_ROAR(x) (((x) & 0xFF) + 0x0100) 
     45#define ROAR_DTMF_CHAR_BYTE(x) (((x) & 0xFF) + 0x0200) 
     46 
     47#define ROAR_DTMF_CHAR_NOOP    ROAR_DTMF_CHAR_ROAR(0) 
     48#define ROAR_DTMF_CHAR_ESCAPE  ROAR_DTMF_CHAR_ROAR(27) 
     49 
    4350ssize_t roar_dtmf_mus2samples(const int_least32_t t, const uint32_t rate); 
    4451 
  • libroardsp/dtmf.c

    r5546 r5547  
    5353 return 0; 
    5454} 
     55 
     56#define _FQL0 697 
     57#define _FQL1 770 
     58#define _FQL2 852 
     59#define _FQL3 941 
     60#define _FQH0 1209 
     61#define _FQH1 1336 
     62#define _FQH2 1477 
     63#define _FQH3 1633 
     64 
     65#define _FRL0 571 
     66#define _FRL1 631 
     67#define _FRL2 _FQL0 
     68#define _FRL3 _FQL1 
     69#define _FRL4 _FQL2 
     70#define _FRL5 _FQL3 
     71#define _FRL6 1040 
     72#define _FRH0 _FQH0 
     73#define _FRH1 _FQH1 
     74#define _FRH2 _FQH2 
     75#define _FRH3 _FQH3 
     76#define _FRH4 1805 
     77#define _FRH5 1995 
     78#define _FRH6 2205 
    5579 
    5680static const struct tone { 
     
    5983 const float f1; 
    6084} _roardsp_tones[] = { 
    61  {'1', 697, 1209}, 
    62  {'2', 697, 1336}, 
    63  {'3', 697, 1477}, 
    64  {'A', 697, 1633}, 
    65  
    66  {'4', 770, 1209}, 
    67  {'5', 770, 1336}, 
    68  {'6', 770, 1477}, 
    69  {'B', 770, 1633}, 
    70  
    71  {'7', 852, 1209}, 
    72  {'8', 852, 1336}, 
    73  {'9', 852, 1477}, 
    74  {'C', 852, 1633}, 
    75  
    76  {'*', 941, 1209}, 
    77  {'0', 941, 1336}, 
    78  {'#', 941, 1477}, 
    79  {'D', 941, 1633}, 
     85 {ROAR_DTMF_CHAR_DTMF('1'), _FQL0, _FQH0}, 
     86 {ROAR_DTMF_CHAR_DTMF('2'), _FQL0, _FQH1}, 
     87 {ROAR_DTMF_CHAR_DTMF('3'), _FQL0, _FQH2}, 
     88 {ROAR_DTMF_CHAR_DTMF('A'), _FQL0, _FQH3}, 
     89 
     90 {ROAR_DTMF_CHAR_DTMF('4'), _FQL1, _FQH0}, 
     91 {ROAR_DTMF_CHAR_DTMF('5'), _FQL1, _FQH1}, 
     92 {ROAR_DTMF_CHAR_DTMF('6'), _FQL1, _FQH2}, 
     93 {ROAR_DTMF_CHAR_DTMF('B'), _FQL1, _FQH3}, 
     94 
     95 {ROAR_DTMF_CHAR_DTMF('7'), _FQL2, _FQH0}, 
     96 {ROAR_DTMF_CHAR_DTMF('8'), _FQL2, _FQH1}, 
     97 {ROAR_DTMF_CHAR_DTMF('9'), _FQL2, _FQH2}, 
     98 {ROAR_DTMF_CHAR_DTMF('C'), _FQL2, _FQH3}, 
     99 
     100 {ROAR_DTMF_CHAR_DTMF('*'), _FQL3, _FQH0}, 
     101 {ROAR_DTMF_CHAR_DTMF('0'), _FQL3, _FQH1}, 
     102 {ROAR_DTMF_CHAR_DTMF('#'), _FQL3, _FQH2}, 
     103 {ROAR_DTMF_CHAR_DTMF('D'), _FQL3, _FQH3}, 
     104 
     105 
     106 {ROAR_DTMF_CHAR_NOOP,   _FRL0, _FRH0}, 
     107 {ROAR_DTMF_CHAR_ESCAPE, _FRL0, _FRH1}, 
     108 
     109 {ROAR_DTMF_CHAR_ROAR('"'), _FRL0, _FRH2}, 
     110 {ROAR_DTMF_CHAR_ROAR(' '), _FRL0, _FRH3}, 
     111 {ROAR_DTMF_CHAR_ROAR('F'), _FRL0, _FRH4}, 
     112 {ROAR_DTMF_CHAR_ROAR('M'), _FRL0, _FRH5}, 
     113 {ROAR_DTMF_CHAR_ROAR('T'), _FRL0, _FRH6}, 
     114 {ROAR_DTMF_CHAR_ROAR('.'), _FRL1, _FRH0}, 
     115 {ROAR_DTMF_CHAR_ROAR('?'), _FRL1, _FRH1}, 
     116 {ROAR_DTMF_CHAR_ROAR('!'), _FRL1, _FRH2}, 
     117 {ROAR_DTMF_CHAR_ROAR(','), _FRL1, _FRH3}, 
     118 {ROAR_DTMF_CHAR_ROAR('G'), _FRL1, _FRH4}, 
     119 {ROAR_DTMF_CHAR_ROAR('N'), _FRL1, _FRH5}, 
     120 {ROAR_DTMF_CHAR_ROAR('U'), _FRL1, _FRH6}, 
     121 {ROAR_DTMF_CHAR_ROAR('1'), _FRL2, _FRH0}, 
     122 {ROAR_DTMF_CHAR_ROAR('2'), _FRL2, _FRH1}, 
     123 {ROAR_DTMF_CHAR_ROAR('3'), _FRL2, _FRH2}, 
     124 {ROAR_DTMF_CHAR_ROAR('A'), _FRL2, _FRH3}, 
     125 {ROAR_DTMF_CHAR_ROAR('H'), _FRL2, _FRH4}, 
     126 {ROAR_DTMF_CHAR_ROAR('O'), _FRL2, _FRH5}, 
     127 {ROAR_DTMF_CHAR_ROAR('V'), _FRL2, _FRH6}, 
     128 {ROAR_DTMF_CHAR_ROAR('4'), _FRL3, _FRH0}, 
     129 {ROAR_DTMF_CHAR_ROAR('5'), _FRL3, _FRH1}, 
     130 {ROAR_DTMF_CHAR_ROAR('6'), _FRL3, _FRH2}, 
     131 {ROAR_DTMF_CHAR_ROAR('B'), _FRL3, _FRH3}, 
     132 {ROAR_DTMF_CHAR_ROAR('I'), _FRL3, _FRH4}, 
     133 {ROAR_DTMF_CHAR_ROAR('P'), _FRL3, _FRH5}, 
     134 {ROAR_DTMF_CHAR_ROAR('W'), _FRL3, _FRH6}, 
     135 {ROAR_DTMF_CHAR_ROAR('7'), _FRL4, _FRH0}, 
     136 {ROAR_DTMF_CHAR_ROAR('8'), _FRL4, _FRH1}, 
     137 {ROAR_DTMF_CHAR_ROAR('9'), _FRL4, _FRH2}, 
     138 {ROAR_DTMF_CHAR_ROAR('C'), _FRL4, _FRH3}, 
     139 {ROAR_DTMF_CHAR_ROAR('J'), _FRL4, _FRH4}, 
     140 {ROAR_DTMF_CHAR_ROAR('Q'), _FRL4, _FRH5}, 
     141 {ROAR_DTMF_CHAR_ROAR('X'), _FRL4, _FRH6}, 
     142 {ROAR_DTMF_CHAR_ROAR('*'), _FRL5, _FRH0}, 
     143 {ROAR_DTMF_CHAR_ROAR('0'), _FRL5, _FRH1}, 
     144 {ROAR_DTMF_CHAR_ROAR('#'), _FRL5, _FRH2}, 
     145 {ROAR_DTMF_CHAR_ROAR('D'), _FRL5, _FRH3}, 
     146 {ROAR_DTMF_CHAR_ROAR('K'), _FRL5, _FRH4}, 
     147 {ROAR_DTMF_CHAR_ROAR('R'), _FRL5, _FRH5}, 
     148 {ROAR_DTMF_CHAR_ROAR('Y'), _FRL5, _FRH6}, 
     149 {ROAR_DTMF_CHAR_ROAR('@'), _FRL6, _FRH0}, 
     150 {ROAR_DTMF_CHAR_ROAR('+'), _FRL6, _FRH1}, 
     151 {ROAR_DTMF_CHAR_ROAR('-'), _FRL6, _FRH2}, 
     152 {ROAR_DTMF_CHAR_ROAR('E'), _FRL6, _FRH3}, 
     153 {ROAR_DTMF_CHAR_ROAR('L'), _FRL6, _FRH4}, 
     154 {ROAR_DTMF_CHAR_ROAR('S'), _FRL6, _FRH5}, 
     155 {ROAR_DTMF_CHAR_ROAR('Z'), _FRL6, _FRH6}, 
    80156 
    81157 {0, -1, -1} 
  • roarclients/roardtmf.c

    r5546 r5547  
    4848        "  --rate  -R RATE    - Set sample rate\n" 
    4949        "  --help             - Show this help\n" 
     50        "  --mode-dtmf        - Use standard DTMF (default)\n" 
     51        "  --mode-roar        - Use RoarAudio extended DTMF\n" 
    5052       ); 
    5153 
     
    5355 
    5456int main (int argc, char * argv[]) { 
     57 enum { 
     58  MODE_DTMF, 
     59  MODE_ROAR 
     60 } mode = MODE_DTMF; 
    5561 int    rate     = ROAR_RATE_DEFAULT; 
    5662 const char * server   = NULL; 
     
    6571 size_t samples; 
    6672 size_t len; 
    67  char  c; 
     73 uint16_t c; 
    6874 int err; 
    6975 
     
    7581  } else if ( !strcmp(k, "--rate") || !strcmp(k, "-r") || !strcmp(k, "-R") ) { 
    7682   rate = roar_str2rate(argv[++i]); 
     83  } else if ( !strcmp(k, "--mode-dtmf") ) { 
     84   mode = MODE_DTMF; 
     85  } else if ( !strcmp(k, "--mode-roar") ) { 
     86   mode = MODE_ROAR; 
    7787  } else if ( !strcmp(k, "--help") ) { 
    7888   usage(); 
     
    95105 samples = len_break + len_tone; 
    96106 
     107/* 
    97108 printf("samples=%llu\n", (long long unsigned int)samples); 
    98 /* 
    99109 return 0; 
    100110*/ 
     
    112122  tones++; 
    113123 
    114   if ( c == '+' || c == '.' || c == '_' ) 
    115    continue; 
     124  if ( mode == MODE_DTMF ) { 
     125   if ( c == '+' || c == '.' || c == '_' ) 
     126    continue; 
     127  } else if ( mode == MODE_ROAR ) { 
     128   c = ROAR_DTMF_CHAR_ROAR(c); 
     129  } 
    116130 
    117   if ( c == ' ' ) { 
     131  if ( mode == MODE_DTMF && c == ' ' ) { 
    118132   roar_dtmf_break(buf, len_tone, rate, ROAR_DTMF_OPTIONS_NONE); 
    119133  } else { 
Note: See TracChangeset for help on using the changeset viewer.