?? upsample.s
字號:
.include "Karaoke_def.h"
.if KARAOKE_MIXER_SUPPORTED == 1
.extern XDelayBuf_me
.extern Up_ReadOffset
.extern Up_writeOffset
.extern Mix_readOffset
.extern coeb_add
.extern coea_add
.extern coe_b8
.extern coe_a8
.extern coe_b32
.extern coe_a32
.extern coe_b441
.extern coe_a441
.extern coe_b48
.extern coe_a48
.extern mi_output
.extern output
.extern output2
.extern upsamplefre
.extern skip_samples
.extern x
.extern y
.extern coe_b
.extern coe_a
.extern output3
.extern Mic_volume_value
.extern _MicEcho
//.extern _load_table
//.extern _mac_init
sec_ResampleCode section code, AFTERADDR POST_CODE_BASE
sec_ResampleCode
//======================================================
//r0:Sampling Rate
//r2:Valid data size
//r3:Frame Size
//======================================================
_upsample_main::
push r0 ,r1
push r2 ,r3
push r4 ,r5
push r6 ,r7
push a13 ,a14
eld a, #0
eld msr0, a
eld msr1, a
eld msr2, a
es psh1
es opm
er op
eld sd1 ,#0x1010
eld sd2 ,sd1
ldw A11, @[A10+iPOST_PARAMETER_PTR] ; 4B
ldw r1 ,@[a10+iPOST_START_FLAG]
cmp eq ,r1 ,#0
jpt init_upsampler
//Upsampling Main Start=====================================
up_start:
esec2 #1
ld a13 ,#SFR_BASE
ldw r2 ,@[a13+rCONFIG0]
and r2 ,#0xf0
or r2, #(SBF0_R16lsb_z | SBF1_W16msb)
or r2, #0x8800 // SBL0/1 Ring mode
ldw @[a13+rCONFIG0] ,r2
ldw r0 ,@[A10+iPOST_MIC_IN_BUF_START_PTR]
ldw r2 ,@[A10+iPOST_MIC_IN_BUF_START_PTR+2]
ldw @[a13+rSBL0BEGIN+0] ,r0
ldw @[a13+rSBL0BEGIN+2] ,r2
ldw @[a13+rSBL1END+0] ,r0
ldw @[a13+rSBL1END+2] ,r2
ldw r0 ,@[A10+iPOST_MIC_IN_BUF_END_PTR]
ldw r2 ,@[A10+iPOST_MIC_IN_BUF_END_PTR+2]
ldw @[a13+rSBL0END+0] ,r0
ldw @[a13+rSBL0END+2] ,r2
ld r0 ,#0
ldw @[a13+rSBL1BEGIN+0] ,r0
ldw @[a13+rSBL1BEGIN+2] ,r0
ldw r2 ,@[a10+iPOST_OUT_BUF_OFFSET+2]
ldw @[a13+rSBL1OFF+0] ,r0
ldw @[a13+rSBL1OFF+2] ,r2
ldw r0, @[a10+iPOST_MIC_IN_BUF_RD_PTR+0]
ldw r2, @[a10+iPOST_MIC_IN_BUF_RD_PTR+2]
ldw @[a13+rSBL0OFF+0] ,r0
ldw @[a13+rSBL0OFF+2] ,r2
ld r0, #SBF0_FILL
ldw @[a13 + rSBFCON], r0
and r2 ,#0x2
brt aligned4
eld rp0 ,#0x7FFE
eld b ,@rp0+s0
aligned4:
ldw r4 ,@[a10+iPOST_NUM_OF_SAMPLES]
ldw r0 ,@[a10+iPOST_SAMPLE_RATE+2]
cmp eq, r0, #0x1F40 ;8000Hz
brf fre_11025
eld rp1, #upsamplefre
eld a, #0x7D00
ecld r0, a
eld @rp1+d1, a
eld a, #3
eld @rp1+d1, a
add r4 ,r4
brad Valid_data
add r4 ,r4
fre_11025:
cmp eq, r0, #0x2B11 ;11052Hz
brf fre_12000
eld rp1, #upsamplefre
eld a, #0xAC44
efz8 a
ecld r0, a
eld @rp1+d1, a
eld a, #3
eld @rp1+d1, a
add r4 ,r4
brad Valid_data
add r4 ,r4
fre_12000:
cmp eq, r0, #12000 ;12000Hz
brf fre_16000
eld rp1, #upsamplefre
eld a, #0xBB80
efz8 a
ecld r0, a
eld @rp1+d1, a
eld a, #3
eld @rp1+d1, a
add r4 ,r4
brad Valid_data
add r4 ,r4
fre_16000:
cmp eq, r0, #0x3E80 ;16000Hz
brf fre_22050
eld rp1, #upsamplefre
eld a, #0x7D00
ecld r0, a
eld @rp1+d1, a
eld a, #1
eld @rp1+d1, a
brad Valid_data
add r4 ,r4
fre_22050:
cmp eq, r0, #0x5622 ;22050Hz
brf fre_24000
eld rp1, #upsamplefre
eld a, #0xAC44
efz8 a
ecld r0, a
eld @rp1+d1, a
eld a, #1
eld @rp1+d1, a
brad Valid_data
add r4 ,r4
fre_24000:
cmp eq, r0, #0x5DC0 ;24000Hz
brf fre_32000
eld rp1, #upsamplefre
eld a, #0xBB80
efz8 a
ecld r0, a
eld @rp1+d1, a
eld a, #1
eld @rp1+d1, a
brad Valid_data
add r4 ,r4
fre_32000: ;32000, 44100, 48000
eld rp1, #upsamplefre
ecld a, r0
efz8 a
eld @rp1+d1, a
eld a, #0
eld @rp1+d1, a
Valid_data:
eld rp0 ,#UPInput_add ;resample input
eld b ,Up_writeOffset
ecld r2 ,b
eld b ,Mix_readOffset
ecld r3 ,b
// ldw r0 ,@[a10+iPOST_SAMPLE_RATE+2]
cmp ge ,r2 ,r3
brf Brotate
brad Valid_check
sub r2 ,r3 ;Number of valid data
Brotate:
cmp eq ,r0 ,#0x7D00 ;32000
brf size_freq441
ld r6 ,#OutputSize32
bra size_calcu
size_freq441:
cmp eq ,r0 ,#0xAC44 ;32000
brf size_freq48
ld r6 ,#OutputSize441
bra size_calcu
size_freq48:
ld r6 ,#OutputSize
size_calcu:
sub r6 ,r3
add r2 ,r6
Valid_check:
ld r3 ,r4
cmp ge ,r2 ,r3
brf Check_Rate
cmp eq ,r0 ,#0x7D00 ;32000
brf output_441
ld r4 ,#OutputSize32
bra start_Mix
output_441:
cmp eq ,r0 ,#0xAC44 ;44100
brf output_48
ld r4 ,#OutputSize441
bra start_Mix
output_48:
ld r4 ,#OutputSize
bra start_Mix
Check_Rate:
.if KARAOKE_MIC_ECHO_SUPPORTED == 1
jsr _MicEcho
.endif
eld rp0 ,#mi_output
cmp eq ,r0 ,#0x7D00 ;32000
brf Up_441Start
jsr _resamp_32
ld r6 ,#320
eld rp1 ,#output2
eld rp2 ,#output3
eld a ,Up_writeOffset
erpn rp2 ,a
jsr _LFE_pass
add r2 ,#320
eld rp1 ,#Up_writeOffset
eld a ,@rp1+s0
eadd a ,#320
ecp a ,#OutputSize32
bra ec2 ,Cbuff32
eld a ,#0
Cbuff32:
ld r4 ,#OutputSize32
brad Up_End
eld @rp1+d0 ,a
Up_441Start:
cmp eq ,r0 ,#0xAC44 ;44100
brf Up_48Start
jsr _resamp_441
ld r6 ,#441
eld rp1 ,#output2
eld rp2 ,#output3
eld a ,Up_writeOffset
erpn rp2 ,a
jsr _LFE_pass
add r2 ,#441
eld rp1 ,#Up_writeOffset
eld a ,@rp1+s0
eadd a ,#441
ecp a ,#OutputSize441
bra ec2 ,Cbuff441
eld a ,#0
Cbuff441:
ld r4 ,#OutputSize441
brad Up_End
eld @rp1+d0 ,a
Up_48Start:
; cmp eq ,r0 ,#0xBB80 ;48000
; brf UP_Error_End
jsr _resamp_48
ld r6 ,#480
eld rp1 ,#output2
eld rp2 ,#output3
eld a ,Up_writeOffset
erpn rp2 ,a
jsr _LFE_pass
add r2 ,#480
eld rp1 ,#Up_writeOffset
eld a ,@rp1+s0
eadd a ,#480
ecp a ,#OutputSize
bra ec2 ,Cbuff48
eld a ,#0
Cbuff48:
ld r4 ,#OutputSize
eld @rp1+d0 ,a
Up_End:
eld rp0 ,#UPInput_add ;resample input
cmp ge ,r2 ,r3
brf Check_Rate
start_Mix:
eld sd0 ,#0x1010
eld sd3 ,#0x1010
er op
ld a13 ,#SFR_BASE
ldw r0, @[a10+iPOST_OUT_BUF_OFFSET+0]
ldw r6, @[a10+iPOST_OUT_BUF_OFFSET+2]
ldw @[a13+rSBL1OFF+0], r0
ldw @[a13+rSBL1OFF+2], r6
add r0, #0x28
ld e13, r0
ld r13, r6
//Mic volume Add=========================================================
ldw r0, @[a11+Mic_Volume]
eld rp3, #Mic_volume_value
ecld c, r0
efz8 c
erpn rp3, c
eld y0, @rp3
// ======================================================================
eld rp1 ,#skip_samples
eld c ,@rp1+s0 ;skip_samples
ecld r3 ,c
add r3 ,#1
eld rp1 ,#output3
eld rp3 ,#0x7FFF
eld a ,Mix_readOffset
erpn rp1 ,a
ecld r7 ,a
ldw r6 ,@[a10+iPOST_NUM_OF_SAMPLES]
; sub r6 ,#1
ldb r0 ,@[a11+Main_AudioOnOff]
cmp eq ,r0 ,#0
brf NomainAudio
Mixer_main:
cmp eq ,r7 ,r4
brf Mix_str
eld rp1 ,#output3
ld r7 ,#0
Mix_str:
eld x0 ,@rp1+s1 ;rp1 : mic output
erpn rp1, c
emul x0y0
emld ma0, x0y0
;;;;; esla ma0:mic volume 2X....
;esla ma0
;esla ma0
;esla ma0 ;mic out * volum * 8
eld ma1, ma0 ;mic out * volum * 8
ldw r0, @[a13+0]
ecld a, r0
esla8 a
eld ph, a
eadd ma0, p
eld a, ma0h
eld @rp3+d0 ,a ;Left
.if OUTPUT_MODE == OUT_2CH
ldw r0, @[a13+2]
.endif
.if OUTPUT_MODE == OUT_6CH
ldw r0, @[a13+2]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;LS
ldw r0, @[a13+4]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;C
ldw r0, @[a13+6]
.endif
.if OUTPUT_MODE == OUT_8CH
ldw r0, @[a13+2]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;L
ldw r0, @[a13+4]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;LS
ldw r0, @[a13+6]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;C
ldw r0, @[a13+8]
.endif
ecld a, r0
esla8 a
eld ph, a
eadd ma1, p
eld a, ma1h
; eadd a ,b
eld @rp3+d0 ,a ;R
.if OUTPUT_MODE == OUT_2CH
add a13, #4
.endif
.if OUTPUT_MODE == OUT_6CH
ldw r0, @[a13+8]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;RS
ldw r0, @[a13+10]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;W
add a13, #12
.endif
.if OUTPUT_MODE == OUT_8CH
ldw r0, @[a13+10]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;R
ldw r0, @[a13+12]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;RS
ldw r0, @[a13+14]
ecld a, r0
esla8 a
eld @rp3+d0 ,a ;W
add a13, #16
.endif
; bnzd r6 ,Mixer_main
dt r6
brfd Mixer_main
add r7, r3
bra upsampleEnd
NomainAudio:
ld r0 ,#0
Nomix_main:
cmp eq ,r7 ,r4
brf Mix_strNo
eld rp1 ,#output3
ld r7 ,#0
Mix_strNo:
eld x0 ,@rp1+s1 ;rp1 : mic output
erpn rp1, c
emul x0y0
emld ma0, x0y0
;;;;; esla ma0:mic volume 2X....
;esla ma0
;esla ma0
;esla ma0 ;mic out * volum * 8
eld ma1, ma0 ;mic out * volum * 8
; ldw r0, @[a13+0]
; ecld a, r0
; esla8 a
; eld ph, a
; eadd ma0, p
eld a, ma0h
eld @rp3+d0 ,a ;Left
;.if OUTPUT_MODE == OUT_2CH
; ldw r0, @[a13+2]
;.endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -