Changeset 2281 for pjproject/trunk/pjmedia/src/pjmedia/tonegen.c
- Timestamp:
- Sep 16, 2008 2:33:16 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/tonegen.c
r2039 r2281 39 39 40 40 41 #if defined(PJ_HAS_FLOATING_POINT) && PJ_HAS_FLOATING_POINT!=0 41 #if (defined(PJ_HAS_FLOATING_POINT) && PJ_HAS_FLOATING_POINT!=0) || \ 42 (defined(PJMEDIA_TONEGEN_FORCE_FLOAT) && PJMEDIA_TONEGEN_FORCE_FLOAT != 0) 42 43 # include <math.h> 43 44 … … 250 251 unsigned options; 251 252 unsigned playback_options; 253 unsigned fade_in_len; /* fade in for this # of samples */ 254 unsigned fade_out_len; /* fade out for this # of samples*/ 252 255 253 256 /* lock */ … … 336 339 tonegen->digit_map = &digit_map; 337 340 341 tonegen->fade_in_len = PJMEDIA_TONEGEN_FADE_IN_TIME * clock_rate / 1000; 342 tonegen->fade_out_len = PJMEDIA_TONEGEN_FADE_OUT_TIME * clock_rate / 1000; 343 338 344 /* Lock */ 339 345 if (options & PJMEDIA_TONEGEN_NO_LOCK) { … … 534 540 generate_tone(&tonegen->state, port->info.channel_count, 535 541 cnt, dst); 542 536 543 dst += cnt; 537 544 tonegen->dig_samples += cnt; 538 545 required -= cnt; 546 547 if (tonegen->dig_samples == cnt) { 548 /* Fade in */ 549 short *samp = (dst - cnt); 550 short *end; 551 552 if (cnt > tonegen->fade_in_len) 553 cnt = tonegen->fade_in_len; 554 end = samp + cnt; 555 if (cnt) { 556 const unsigned step = 0xFFFF / cnt; 557 unsigned scale = 0; 558 559 for (; samp < end; ++samp) { 560 (*samp) = (short)(((*samp) * scale) >> 16); 561 scale += step; 562 } 563 } 564 } else if (tonegen->dig_samples == on_samp) { 565 /* Fade out */ 566 if (cnt > tonegen->fade_out_len) 567 cnt = tonegen->fade_out_len; 568 if (cnt) { 569 short *samp = (dst - cnt); 570 const unsigned step = 0xFFFF / cnt; 571 unsigned scale = 0xFFFF - step; 572 573 for (; samp < dst; ++samp) { 574 (*samp) = (short)(((*samp) * scale) >> 16); 575 scale -= step; 576 } 577 } 578 } 539 579 540 580 if (dst == end)
Note: See TracChangeset
for help on using the changeset viewer.