17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@*********************************************************** 27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Function: WT_VoiceGain 37df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Processor: ARM-E 47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Description: the main synthesis function when fetching 57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ wavetable samples. 67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ C-callable. 77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 87df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Usage: 97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Usage: 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ WT_VoiceGain( 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_WT_VOICE *pWTVoice, 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_WT_FRAME *pWTFrame); 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Copyright 2004, 2005 Sonic Network, Inc. 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Revision Control: 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ $Revision: 814 $ 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ $Date: 2007-08-02 10:34:53 -0700 (Thu, 02 Aug 2007) $ 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ where: 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_WT_VOICE *psVoice 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r0 247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ 257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ S_WT_FRAME *pWTFrame 267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ PASSED IN: r1 277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@**************************************************************** 287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .include "ARM_synth_constants_gnu.inc" 327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .arm 347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .text 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .global WT_VoiceGain 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Register usage 397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ -------------- 407df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpWTVoice .req r0 417df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpWTFrame .req r1 427df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpInputBuffer .req r2 437df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectpMixBuffer .req r3 447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 457df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp0 .req r4 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp1 .req r5 477df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp2 .req r1 @ reuse register 487df30109963092559d3760c0661a020f9daf1030The Android Open Source Projecttmp3 .req r6 497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 507df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectnumSamples .req r9 517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .if STEREO_OUTPUT 537df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectgainIncLeft .req r7 547df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectgainIncRight .req r8 557df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectgainLeft .req r10 567df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectgainRight .req r11 577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .else 587df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectgainIncrement .req r7 597df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectgain .req r8 607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .endif 617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ register context for local variables 647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@SaveRegs RLIST {r4-r11,lr} 657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@RestoreRegs RLIST {r4-r11,pc} 667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .func WT_VoiceGain 687df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectWT_VoiceGain: 697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STMFD sp!, {r4-r11,lr} 717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR pInputBuffer, [pWTFrame, #m_pAudioBuffer] 737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR pMixBuffer, [pWTFrame, #m_pMixBuffer] 747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR numSamples, [pWTFrame, #m_numSamples] 757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Stereo version 787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ NOTE: instructions are reordered to reduce the effect of latency 807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ due to storage and computational dependencies. 817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .if STEREO_OUTPUT 847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR tmp0, [pWTFrame, #m_prevGain] 867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR tmp1, [pWTFrame, #m_gainTarget] 877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH gainLeft, [pWTVoice, #m_gainLeft] 897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH gainRight, [pWTVoice, #m_gainRight] 907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainIncLeft, gainLeft 927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULBB gainLeft, tmp0, gainLeft 937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULBB gainIncLeft, tmp1, gainIncLeft 957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUB gainIncLeft, gainIncLeft, gainLeft 967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainLeft, gainLeft, ASR #(NUM_MIXER_GUARD_BITS - 2) 977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainIncLeft, gainIncLeft, ASR #(SYNTH_UPDATE_PERIOD_IN_BITS + NUM_MIXER_GUARD_BITS - 2) 987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainIncRight, gainRight 1007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULBB gainRight, tmp0, gainRight 1017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULBB gainIncRight, tmp1, gainIncRight 1037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUB gainIncRight, gainIncRight, gainRight 1047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainRight, gainRight, ASR #(NUM_MIXER_GUARD_BITS - 2) 1057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainIncRight, gainIncRight, ASR #(SYNTH_UPDATE_PERIOD_IN_BITS + NUM_MIXER_GUARD_BITS - 2) 1067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH tmp0, [pInputBuffer], #2 1087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1097df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectStereoGainLoop: 1107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR tmp1, [pMixBuffer] 1117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project ADD gainLeft, gainLeft, gainIncLeft 1137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMLAWB tmp1, gainLeft, tmp0, tmp1 1157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR tmp2, [pMixBuffer, #4] 1177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project ADD gainRight, gainRight, gainIncRight 1197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STR tmp1, [pMixBuffer], #4 1217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMLAWB tmp2, gainRight, tmp0, tmp2 1237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUBS numSamples, numSamples, #1 1257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRGTSH tmp0, [pInputBuffer], #2 1277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STR tmp2, [pMixBuffer], #4 1297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BGT StereoGainLoop 1317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 1337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@ Mono version 1347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project@---------------------------------------------------------------- 1357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .else 1367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR gain, [pWTFrame, #m_prevGain] 1387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gain, gain, LSL #(NUM_MIXER_GUARD_BITS + 4) 1397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR gainIncrement, [pWTFrame, #m_gainTarget] 1407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainIncrement, gainIncrement, LSL #(NUM_MIXER_GUARD_BITS + 4) 1417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUB gainIncrement, gainIncrement, gain 1427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV gainIncrement, gainIncrement, ASR #SYNTH_UPDATE_PERIOD_IN_BITS 1437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1447df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectMonoGainLoop: 1457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDRSH tmp0, [pInputBuffer], #NEXT_OUTPUT_PCM @ fetch voice output 1477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDR tmp1, [pMixBuffer] @ get left channel output sample 1497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project ADD gain, gain, gainIncrement @ gain step to eliminate zipper noise 1507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SMULWB tmp0, gain, tmp0 @ sample * local gain 1517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project MOV tmp0, tmp0, ASR #1 @ add 6dB headroom 1537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project ADD tmp1, tmp0, tmp1 1547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project STR tmp1, [pMixBuffer], #4 @ save and bump pointer 1557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project SUBS numSamples, numSamples, #1 1577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BGT MonoGainLoop 1587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .endif @end Mono version 1607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project LDMFD sp!,{r4-r11,lr} 1627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project BX lr 1637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .endfunc 1657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project .end 1667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 167