WasapiSharedVolumeStabilizer for Visual Audio

For everything that's not in any way related to PureBasic. General chat etc...
User avatar
oryaaaaa
Addict
Addict
Posts: 829
Joined: Mon Jan 12, 2004 11:40 pm
Location: Okazaki, JAPAN

WasapiSharedVolumeStabilizer for Visual Audio

Post by oryaaaaa »

Hello,

Based on feedback from high-end audio/visual users, we have made a significant improvement in the WASAPI shared mode by setting the volume to "maximum volume set by ultra-low noise operation". This requires BASS.DLL BASSWASAPI.DLL, but the technique allows "high-end visual audio with video and audio at the same time" with only the volume setting portion. For CPUs without RDRAND instruction, change "BeforeProcedureRegisters_RDRAND" to "BeforeProcedureRegisters_SMSW". It uses the instruction cache and has been optimized for AlderLake.

Thank you.

A major rationale for improvement
Just set the volume 1.000. Sound is bad.
INC SHL R8, set 1.000 at cl. Sound is good.
Set 1.000 at MMX PSLLW PSLLQ. Sound is high grade.

The compiler option must be "CPU with MMX".

Code: Select all

; WasapiSharedVolumeStabilizer
; Copyright (c) Hiroyuki Yokota (oryaaaaa)
; 2023/10/21  5:29 depend BASSWASAPI 2.4 and BASS 2.4

; PureBasic 6.02 LTS (Windows - x64)
; PureBasic, all the provided tools And components
; are copyright © 1998-2023 Fantaisie Software
; +
; BASS 2.4
; Copyright (c) 1999-2019 Un4seen Developments Ltd. All rights reserved.
; BASS.DLL 64-bit BASS Module
; +
; BASSWASAPI 2.4
; Copyright (c) 2009-2017 Un4seen Developments Ltd. All rights reserved.
; BASSWASAPI.DLL 64-bit BASSWASAPI Module
; BASSWASAPI.LIB  64-bit BASSWASAPI Import library
; = 
; Build need "BASSWASAPI.LIB", Run need "BASS.DLL" "BASSWASAPI.DLL"
; Executable Format "Console" "CPU with MMX"

Macro Set_CL64
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !INC cl
  !INC cl
  !INC cl
  !SHL cl, cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
EndMacro

Macro ALL_MMX_CLEAR_SHIFTWORD_INC_CL
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  !MOVQ mm1, Rcx
  !PSLLW mm0, mm1 ;1  Left 1bit shift
  !PSLLW mm0, mm1 ;2  Left 1bit shift
  !PSLLW mm0, mm1 ;3  Left 1bit shift
  !PSLLW mm0, mm1 ;4  Left 1bit shift
  !PSLLW mm0, mm1 ;5  Left 1bit shift
  !PSLLW mm0, mm1 ;6  Left 1bit shift
  !PSLLW mm0, mm1 ;7  Left 1bit shift
  !PSLLW mm0, mm1 ;8  Left 1bit shift
  !PSLLW mm0, mm1 ;9  Left 1bit shift
  !PSLLW mm0, mm1 ;A  Left 1bit shift
  !PSLLW mm0, mm1 ;B  Left 1bit shift
  !PSLLW mm0, mm1 ;C  Left 1bit shift
  !PSLLW mm0, mm1 ;D  Left 1bit shift
  !PSLLW mm0, mm1 ;E  Left 1bit shift
  !PSLLW mm0, mm1 ;F  Left 1bit shift
  !PSLLW mm0, mm1 ;0  Left 1bit shift
  !MOVQ mm0, mm1
  ;
  !PSLLW mm1, mm0 ;1  Left 1bit shift
  !PSLLW mm1, mm0 ;2  Left 1bit shift
  !PSLLW mm1, mm0 ;3  Left 1bit shift
  !PSLLW mm1, mm0 ;4  Left 1bit shift
  !PSLLW mm1, mm0 ;5  Left 1bit shift
  !PSLLW mm1, mm0 ;6  Left 1bit shift
  !PSLLW mm1, mm0 ;7  Left 1bit shift
  !PSLLW mm1, mm0 ;8  Left 1bit shift
  !PSLLW mm1, mm0 ;9  Left 1bit shift
  !PSLLW mm1, mm0 ;A  Left 1bit shift
  !PSLLW mm1, mm0 ;B  Left 1bit shift
  !PSLLW mm1, mm0 ;C  Left 1bit shift
  !PSLLW mm1, mm0 ;D  Left 1bit shift
  !PSLLW mm1, mm0 ;E  Left 1bit shift
  !PSLLW mm1, mm0 ;F  Left 1bit shift
  !PSLLW mm1, mm0 ;0  Left 1bit shift
  ;
  !PSLLW mm2, mm0 ;1  Left 1bit shift
  !PSLLW mm2, mm0 ;2  Left 1bit shift
  !PSLLW mm2, mm0 ;3  Left 1bit shift
  !PSLLW mm2, mm0 ;4  Left 1bit shift
  !PSLLW mm2, mm0 ;5  Left 1bit shift
  !PSLLW mm2, mm0 ;6  Left 1bit shift
  !PSLLW mm2, mm0 ;7  Left 1bit shift
  !PSLLW mm2, mm0 ;8  Left 1bit shift
  !PSLLW mm2, mm0 ;9  Left 1bit shift
  !PSLLW mm2, mm0 ;A  Left 1bit shift
  !PSLLW mm2, mm0 ;B  Left 1bit shift
  !PSLLW mm2, mm0 ;C  Left 1bit shift
  !PSLLW mm2, mm0 ;D  Left 1bit shift
  !PSLLW mm2, mm0 ;E  Left 1bit shift
  !PSLLW mm2, mm0 ;F  Left 1bit shift
  !PSLLW mm2, mm0 ;0  Left 1bit shift
  ;
  !PSLLW mm3, mm0 ;1  Left 1bit shift
  !PSLLW mm3, mm0 ;2  Left 1bit shift
  !PSLLW mm3, mm0 ;3  Left 1bit shift
  !PSLLW mm3, mm0 ;4  Left 1bit shift
  !PSLLW mm3, mm0 ;5  Left 1bit shift
  !PSLLW mm3, mm0 ;6  Left 1bit shift
  !PSLLW mm3, mm0 ;7  Left 1bit shift
  !PSLLW mm3, mm0 ;8  Left 1bit shift
  !PSLLW mm3, mm0 ;9  Left 1bit shift
  !PSLLW mm3, mm0 ;A  Left 1bit shift
  !PSLLW mm3, mm0 ;B  Left 1bit shift
  !PSLLW mm3, mm0 ;C  Left 1bit shift
  !PSLLW mm3, mm0 ;D  Left 1bit shift
  !PSLLW mm3, mm0 ;E  Left 1bit shift
  !PSLLW mm3, mm0 ;F  Left 1bit shift
  !PSLLW mm3, mm0 ;0  Left 1bit shift
  ;
  !PSLLW mm4, mm0 ;1  Left 1bit shift
  !PSLLW mm4, mm0 ;2  Left 1bit shift
  !PSLLW mm4, mm0 ;3  Left 1bit shift
  !PSLLW mm4, mm0 ;4  Left 1bit shift
  !PSLLW mm4, mm0 ;5  Left 1bit shift
  !PSLLW mm4, mm0 ;6  Left 1bit shift
  !PSLLW mm4, mm0 ;7  Left 1bit shift
  !PSLLW mm4, mm0 ;8  Left 1bit shift
  !PSLLW mm4, mm0 ;9  Left 1bit shift
  !PSLLW mm4, mm0 ;A  Left 1bit shift
  !PSLLW mm4, mm0 ;B  Left 1bit shift
  !PSLLW mm4, mm0 ;C  Left 1bit shift
  !PSLLW mm4, mm0 ;D  Left 1bit shift
  !PSLLW mm4, mm0 ;E  Left 1bit shift
  !PSLLW mm4, mm0 ;F  Left 1bit shift
  !PSLLW mm4, mm0 ;0  Left 1bit shift
  ;
  !PSLLW mm5, mm0 ;1  Left 1bit shift
  !PSLLW mm5, mm0 ;2  Left 1bit shift
  !PSLLW mm5, mm0 ;3  Left 1bit shift
  !PSLLW mm5, mm0 ;4  Left 1bit shift
  !PSLLW mm5, mm0 ;5  Left 1bit shift
  !PSLLW mm5, mm0 ;6  Left 1bit shift
  !PSLLW mm5, mm0 ;7  Left 1bit shift
  !PSLLW mm5, mm0 ;8  Left 1bit shift
  !PSLLW mm5, mm0 ;9  Left 1bit shift
  !PSLLW mm5, mm0 ;A  Left 1bit shift
  !PSLLW mm5, mm0 ;B  Left 1bit shift
  !PSLLW mm5, mm0 ;C  Left 1bit shift
  !PSLLW mm5, mm0 ;D  Left 1bit shift
  !PSLLW mm5, mm0 ;E  Left 1bit shift
  !PSLLW mm5, mm0 ;F  Left 1bit shift
  !PSLLW mm5, mm0 ;0  Left 1bit shift
  ;
  !PSLLW mm6, mm0 ;1  Left 1bit shift
  !PSLLW mm6, mm0 ;2  Left 1bit shift
  !PSLLW mm6, mm0 ;3  Left 1bit shift
  !PSLLW mm6, mm0 ;4  Left 1bit shift
  !PSLLW mm6, mm0 ;5  Left 1bit shift
  !PSLLW mm6, mm0 ;6  Left 1bit shift
  !PSLLW mm6, mm0 ;7  Left 1bit shift
  !PSLLW mm6, mm0 ;8  Left 1bit shift
  !PSLLW mm6, mm0 ;9  Left 1bit shift
  !PSLLW mm6, mm0 ;A  Left 1bit shift
  !PSLLW mm6, mm0 ;B  Left 1bit shift
  !PSLLW mm6, mm0 ;C  Left 1bit shift
  !PSLLW mm6, mm0 ;D  Left 1bit shift
  !PSLLW mm6, mm0 ;E  Left 1bit shift
  !PSLLW mm6, mm0 ;F  Left 1bit shift
  !PSLLW mm6, mm0 ;0  Left 1bit shift
  ;
  !PSLLW mm7, mm0 ;1  Left 1bit shift
  !PSLLW mm7, mm0 ;2  Left 1bit shift
  !PSLLW mm7, mm0 ;3  Left 1bit shift
  !PSLLW mm7, mm0 ;4  Left 1bit shift
  !PSLLW mm7, mm0 ;5  Left 1bit shift
  !PSLLW mm7, mm0 ;6  Left 1bit shift
  !PSLLW mm7, mm0 ;7  Left 1bit shift
  !PSLLW mm7, mm0 ;8  Left 1bit shift
  !PSLLW mm7, mm0 ;9  Left 1bit shift
  !PSLLW mm7, mm0 ;A  Left 1bit shift
  !PSLLW mm7, mm0 ;B  Left 1bit shift
  !PSLLW mm7, mm0 ;C  Left 1bit shift
  !PSLLW mm7, mm0 ;D  Left 1bit shift
  !PSLLW mm7, mm0 ;E  Left 1bit shift
  !PSLLW mm7, mm0 ;F  Left 1bit shift
  !PSLLW mm7, mm0 ;0  Left 1bit shift
EndMacro

Macro MOV_Rax_Rax_Up_Down
  !MOV al, al
  !MOV ah, ah
  !MOV ax, ax
  !MOV Rax, Rax
  !MOV ax, ax
  !MOV ah, ah
  !MOV al, al
EndMacro

Macro MOV_Rbx_Rbx_Up_Down
  !MOV bl, bl
  !MOV bh, bh
  !MOV bx, bx
  !MOV Rbx, Rbx
  !MOV bx, bx
  !MOV bh, bh
  !MOV bl, bl
EndMacro

Macro MOV_Rcx_Rcx_Up_Down
  !MOV cl, cl
  !MOV ch, ch
  !MOV cx, cx
  !MOV Rcx, Rcx
  !MOV cx, cx
  !MOV ch, ch
  !MOV cl, cl
EndMacro

Macro MOV_Rdx_Rdx_Up_Down
  !MOV dl, dl
  !MOV dh, dh
  !MOV dx, dx
  !MOV Rdx, Rdx
  !MOV dx, dx
  !MOV dh, dh
  !MOV dl, dl
EndMacro

Macro MOV_R8_R8_Up_Down
  !MOV R8b, R8b
  !MOV R8w, R8w
  !MOV R8, R8
  !MOV R8w, R8w
  !MOV R8b, R8b
EndMacro

Macro MOV_R9_R9_Up_Down
  !MOV R9b, R9b
  !MOV R9w, R9w
  !MOV R9, R9
  !MOV R9w, R9w
  !MOV R9b, R9b
EndMacro

Macro MOV_R10_R10_Up_Down
  !MOV R10b, R10b
  !MOV R10w, R10w
  !MOV R10, R10
  !MOV R10w, R10w
  !MOV R10b, R10b
EndMacro

Macro MOV_R11_R11_Up_Down
  !MOV R11b, R11b
  !MOV R11w, R11w
  !MOV R11, R11
  !MOV R11w, R11w
  !MOV R11b, R11b
EndMacro

Macro MOV_R12_R12_Up_Down
  !MOV R12b, R12b
  !MOV R12w, R12w
  !MOV R12, R12
  !MOV R12w, R12w
  !MOV R12b, R12b
EndMacro

Macro MOV_R13_R13_Up_Down
  !MOV R13b, R13b
  !MOV R13w, R13w
  !MOV R13, R13
  !MOV R13w, R13w
  !MOV R13b, R13b
EndMacro

Macro MOV_R14_R14_Up_Down
  !MOV R14b, R14b
  !MOV R14w, R14w
  !MOV R14, R14
  !MOV R14w, R14w
  !MOV R14b, R14b
EndMacro

Macro MOV_R15_R15_Up_Down
  !MOV R15b, R15b
  !MOV R15w, R15w
  !MOV R15, R15
  !MOV R15w, R15w
  !MOV R15b, R15b
EndMacro

Macro MOV_Rsp_Rsp_Up_Down
  !MOV spl, spl
  !MOV sp, sp
  !MOV Rsp, Rsp
  !MOV sp, sp
  !MOV spl, spl
EndMacro

Macro MOV_Rbp_Rbp_Up_Down
  !MOV bpl, bpl
  !MOV bp, bp
  !MOV Rbp, Rbp
  !MOV bp, bp
  !MOV bpl, bpl
EndMacro

Macro MOV_Rsi_Rsi_Up_Down
  !MOV sil, sil
  !MOV si, si
  !MOV Rsi, Rsi
  !MOV si, si
  !MOV sil, sil
EndMacro

Macro MOV_Rdi_Rdi_Up_Down
  !MOV dil, dil
  !MOV di, di
  !MOV Rdi, Rdi
  !MOV di, di
  !MOV dil, dil
EndMacro

Macro SIMPLE_MOVE_REGISTERS_Up_and_Down
  ; 249 @@
  !NOP QWORD [Rip+136]
  !NOP QWORD [Rip+152]
  !NOP QWORD [Rip+168]
  !NOP QWORD [Rip+184]
  !NOP QWORD [Rip+200]
  !NOP QWORD [Rip+216]
  !NOP QWORD [Rip+232]
  !NOP QWORD [Rip+248]
  !NOP QWORD [Rip+264]
  !NOP QWORD [Rip+280]
  !NOP QWORD [Rip+296]
  !NOP QWORD [Rip+312]
  !NOP QWORD [Rip+328]
  !NOP QWORD [Rip+344]
  !NOP QWORD [Rip+360]
  !NOP QWORD [Rip+376]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  MOV_Rax_Rax_Up_Down
  MOV_Rdx_Rdx_Up_Down
  MOV_Rsp_Rsp_Up_Down
  MOV_Rsi_Rsi_Up_Down
  MOV_R9_R9_Up_Down
  MOV_R11_R11_Up_Down
  MOV_R13_R13_Up_Down
  MOV_R15_R15_Up_Down
  MOV_Rcx_Rcx_Up_Down
  MOV_Rbx_Rbx_Up_Down
  MOV_Rbp_Rbp_Up_Down
  MOV_Rdi_Rdi_Up_Down
  MOV_R8_R8_Up_Down
  MOV_R10_R10_Up_Down
  MOV_R12_R12_Up_Down
  MOV_R14_R14_Up_Down
  ; 249 @@ End
EndMacro

Macro BeforeProcedureRegisters_RDRAND
  ALL_MMX_CLEAR_SHIFTWORD_INC_CL
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  ; 17 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip+32]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ mm0, Rax
  !MOVQ mm1, Rdx
  !MOVQ mm2, Rsp
  !MOVQ mm3, Rsi
  !MOVQ mm4, R9
  !MOVQ mm5, R11
  !MOVQ mm6, R13
  !MOVQ mm7, R15
  ; 17 @@ End
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rax
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rdx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rsp
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rsi
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R9
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R11
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R13
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R15
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  ; 49 @@
  !NOP QWORD [Rip+32]
  !NOP QWORD [Rip+48]
  !NOP QWORD [Rip+64]
  !NOP QWORD [Rip+80]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]  
  !MOVQ Rax, mm0
  !MOVQ Rdx, mm1
  !MOVQ Rsp, mm2
  !MOVQ Rsi, mm3
  !MOVQ R9, mm4
  !MOVQ R11, mm5
  !MOVQ R13, mm6
  !MOVQ R15, mm7
  !MOVQ mm0, Rcx
  !MOVQ mm1, Rbx
  !MOVQ mm2, Rbp
  !MOVQ mm3, Rdi
  !MOVQ mm4, R8
  !MOVQ mm5, R10
  !MOVQ mm6, R12
  !MOVQ mm7, R14
  ; 49 @@ End
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rcx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rbx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rbp
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rdi
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R8
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R10
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R12
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R14
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  ; 19 @@
  !NOP QWORD [Rip+24]
  !NOP QWORD [Rip+40]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ Rcx, mm0
  !MOVQ Rbx, mm1
  !MOVQ Rbp, mm2
  !MOVQ Rdi, mm3
  !MOVQ R8, mm4
  !MOVQ R10, mm5
  !MOVQ R12, mm6
  !MOVQ R14, mm7
  !EMMS
  ; 19 @@ End
  SIMPLE_MOVE_REGISTERS_Up_and_Down
EndMacro

Macro BeforeProcedureRegisters_SMSW
  ALL_MMX_CLEAR_SHIFTWORD_INC_CL
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  ; 17 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip+32]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ mm0, Rax
  !MOVQ mm1, Rdx
  !MOVQ mm2, Rsp
  !MOVQ mm3, Rsi
  !MOVQ mm4, R9
  !MOVQ mm5, R11
  !MOVQ mm6, R13
  !MOVQ mm7, R15
  ; 17 @@ End
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rax
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rdx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rsp
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rsi
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R9
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R11
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R13
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R15
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  ; 49 @@
  !NOP QWORD [Rip+32]
  !NOP QWORD [Rip+48]
  !NOP QWORD [Rip+64]
  !NOP QWORD [Rip+80]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]  
  !MOVQ Rax, mm0
  !MOVQ Rdx, mm1
  !MOVQ Rsp, mm2
  !MOVQ Rsi, mm3
  !MOVQ R9, mm4
  !MOVQ R11, mm5
  !MOVQ R13, mm6
  !MOVQ R15, mm7
  !MOVQ mm0, Rcx
  !MOVQ mm1, Rbx
  !MOVQ mm2, Rbp
  !MOVQ mm3, Rdi
  !MOVQ mm4, R8
  !MOVQ mm5, R10
  !MOVQ mm6, R12
  !MOVQ mm7, R14
  ; 49 @@ End
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rcx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rbx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rbp
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW Rdi
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R8
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R10
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R12
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !SMSW R14
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  ; 19 @@
  !NOP QWORD [Rip+24]
  !NOP QWORD [Rip+40]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ Rcx, mm0
  !MOVQ Rbx, mm1
  !MOVQ Rbp, mm2
  !MOVQ Rdi, mm3
  !MOVQ R8, mm4
  !MOVQ R10, mm5
  !MOVQ R12, mm6
  !MOVQ R14, mm7
  !EMMS
  ; 19 @@ End
  SIMPLE_MOVE_REGISTERS_Up_and_Down
EndMacro

Macro MacroMakeFloat
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  !MOVQ mm5, Rcx
  !PSLLW mm1, mm5 ;1  Left 1bit shift
  !PSLLW mm1, mm5 ;2  Left 1bit shift
  !PSLLW mm1, mm5 ;3  Left 1bit shift
  !PSLLW mm1, mm5 ;4  Left 1bit shift
  !PSLLW mm1, mm5 ;5  Left 1bit shift
  !PSLLW mm1, mm5 ;6  Left 1bit shift
  !PSLLW mm1, mm5 ;7  Left 1bit shift
  !PSLLW mm1, mm5 ;8  Left 1bit shift
  !PSLLW mm1, mm5 ;9  Left 1bit shift
  !PSLLW mm1, mm5 ;A  Left 1bit shift
  !PSLLW mm1, mm5 ;B  Left 1bit shift
  !PSLLW mm1, mm5 ;C  Left 1bit shift
  !PSLLW mm1, mm5 ;D  Left 1bit shift
  !PSLLW mm1, mm5 ;E  Left 1bit shift
  !PSLLW mm1, mm5 ;F  Left 1bit shift
  !PSLLW mm1, mm5 ;0  Left 1bit shift
  !MOVQ mm1, Rcx
  !PSLLW mm5, mm1 ;1  Left 1bit shift
  !PSLLW mm5, mm1 ;2  Left 1bit shift
  !PSLLW mm5, mm1 ;3  Left 1bit shift
  !PSLLW mm5, mm1 ;4  Left 1bit shift
  !PSLLW mm5, mm1 ;5  Left 1bit shift
  !PSLLW mm5, mm1 ;6  Left 1bit shift
  !PSLLW mm5, mm1 ;7  Left 1bit shift
  !PSLLW mm5, mm1 ;8  Left 1bit shift
  !PSLLW mm5, mm1 ;9  Left 1bit shift
  !PSLLW mm5, mm1 ;A  Left 1bit shift
  !PSLLW mm5, mm1 ;B  Left 1bit shift
  !PSLLW mm5, mm1 ;C  Left 1bit shift
  !PSLLW mm5, mm1 ;D  Left 1bit shift
  !PSLLW mm5, mm1 ;E  Left 1bit shift
  !PSLLW mm5, mm1 ;F  Left 1bit shift
  !PSLLW mm5, mm1 ;0  Left 1bit shift
  ; mm5 = 0000 , mm1 = 001
  ;
  ;1 = SHL R8, cl + INC R8b
  ;PSLLQ mm5, mm1
  ;PADDQ mm5, mm1
  ;
  ;0 = SHL R8, cl
  ;PSLLQ mm5, mm1
  ;
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1  
EndMacro

Macro MacroMakeFloatFF
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  !MOVQ mm5, Rcx
  !PSLLW mm1, mm5 ;1  Left 1bit shift
  !PSLLW mm1, mm5 ;2  Left 1bit shift
  !PSLLW mm1, mm5 ;3  Left 1bit shift
  !PSLLW mm1, mm5 ;4  Left 1bit shift
  !PSLLW mm1, mm5 ;5  Left 1bit shift
  !PSLLW mm1, mm5 ;6  Left 1bit shift
  !PSLLW mm1, mm5 ;7  Left 1bit shift
  !PSLLW mm1, mm5 ;8  Left 1bit shift
  !PSLLW mm1, mm5 ;9  Left 1bit shift
  !PSLLW mm1, mm5 ;A  Left 1bit shift
  !PSLLW mm1, mm5 ;B  Left 1bit shift
  !PSLLW mm1, mm5 ;C  Left 1bit shift
  !PSLLW mm1, mm5 ;D  Left 1bit shift
  !PSLLW mm1, mm5 ;E  Left 1bit shift
  !PSLLW mm1, mm5 ;F  Left 1bit shift
  !PSLLW mm1, mm5 ;0  Left 1bit shift
  !MOVQ mm1, Rcx
  !PSLLW mm5, mm1 ;1  Left 1bit shift
  !PSLLW mm5, mm1 ;2  Left 1bit shift
  !PSLLW mm5, mm1 ;3  Left 1bit shift
  !PSLLW mm5, mm1 ;4  Left 1bit shift
  !PSLLW mm5, mm1 ;5  Left 1bit shift
  !PSLLW mm5, mm1 ;6  Left 1bit shift
  !PSLLW mm5, mm1 ;7  Left 1bit shift
  !PSLLW mm5, mm1 ;8  Left 1bit shift
  !PSLLW mm5, mm1 ;9  Left 1bit shift
  !PSLLW mm5, mm1 ;A  Left 1bit shift
  !PSLLW mm5, mm1 ;B  Left 1bit shift
  !PSLLW mm5, mm1 ;C  Left 1bit shift
  !PSLLW mm5, mm1 ;D  Left 1bit shift
  !PSLLW mm5, mm1 ;E  Left 1bit shift
  !PSLLW mm5, mm1 ;F  Left 1bit shift
  !PSLLW mm5, mm1 ;0  Left 1bit shift
  ; mm5 = 0000 , mm1 = 001
  ;
  ;1 = SHL R8, cl + INC R8b
  ;PSLLQ mm5, mm1
  ;PADDQ mm5, mm1
  ;
  ;0 = SHL R8, cl
  ;PSLLQ mm5, mm1
  ;
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1 
EndMacro

Macro ASIO_ChannelSetVolume_Stabilizer_Pretime
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  !MOVQ mm5, Rcx
  !PSLLW mm1, mm5 ;1  Left 1bit shift
  !PSLLW mm1, mm5 ;2  Left 1bit shift
  !PSLLW mm1, mm5 ;3  Left 1bit shift
  !PSLLW mm1, mm5 ;4  Left 1bit shift
  !PSLLW mm1, mm5 ;5  Left 1bit shift
  !PSLLW mm1, mm5 ;6  Left 1bit shift
  !PSLLW mm1, mm5 ;7  Left 1bit shift
  !PSLLW mm1, mm5 ;8  Left 1bit shift
  !PSLLW mm1, mm5 ;9  Left 1bit shift
  !PSLLW mm1, mm5 ;A  Left 1bit shift
  !PSLLW mm1, mm5 ;B  Left 1bit shift
  !PSLLW mm1, mm5 ;C  Left 1bit shift
  !PSLLW mm1, mm5 ;D  Left 1bit shift
  !PSLLW mm1, mm5 ;E  Left 1bit shift
  !PSLLW mm1, mm5 ;F  Left 1bit shift
  !PSLLW mm1, mm5 ;0  Left 1bit shift
  !MOVQ mm1, Rcx
  !PSLLW mm5, mm1 ;1  Left 1bit shift
  !PSLLW mm5, mm1 ;2  Left 1bit shift
  !PSLLW mm5, mm1 ;3  Left 1bit shift
  !PSLLW mm5, mm1 ;4  Left 1bit shift
  !PSLLW mm5, mm1 ;5  Left 1bit shift
  !PSLLW mm5, mm1 ;6  Left 1bit shift
  !PSLLW mm5, mm1 ;7  Left 1bit shift
  !PSLLW mm5, mm1 ;8  Left 1bit shift
  !PSLLW mm5, mm1 ;9  Left 1bit shift
  !PSLLW mm5, mm1 ;A  Left 1bit shift
  !PSLLW mm5, mm1 ;B  Left 1bit shift
  !PSLLW mm5, mm1 ;C  Left 1bit shift
  !PSLLW mm5, mm1 ;D  Left 1bit shift
  !PSLLW mm5, mm1 ;E  Left 1bit shift
  !PSLLW mm5, mm1 ;F  Left 1bit shift
  !PSLLW mm5, mm1 ;0  Left 1bit shift 
  ; ;     Set_CL1
  ; ;     MOVZX_Rcx
  ; ;     !MOVQ mm1, Rcx
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1
  !PSLLQ mm5, mm1
  !PADDQ mm5, mm1    
EndMacro

Macro WASAPI_ChannelSetVolume_Stabilizer
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloatFF
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, NFloat_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloatFF
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, NFloat_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloat
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, Float_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloatFF
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, NFloat_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloat
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, Float_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloatFF
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, NFloat_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; mm5 = -1
  !MOVQ2DQ xmm1, mm5
  MacroMakeFloat
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  ; 5 @@
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ2DQ xmm1, mm5
  !MOVSS xmm1, xmm1
  !EMMS
  ;BASS_WASAPI_SetVolume(D8, Float_1_000)
  !CALL QWORD BASS_WASAPI_SetVolume
  ; 5 @@ End
  ;
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rax, QWORD 0
  !MOV Rax, QWORD 0
  !NOP QWORD [Rip-32]
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
EndMacro

Import "basswasapi.lib"
  BASS_WASAPI_Init.b(device.i, Freq.l, chans.l, flags.l, Buffer.f, period.f, *proc, *User)
  BASS_WASAPI_Free.b()
  BASS_WASAPI_SetVolume.b(linear.b, volume.f)
EndImport

Global RDM.i, RN.i

If OpenConsole("Wasapi Shared Volume Stabilizer")
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
  !INC cl
  !INC cl
  !INC cl
  !INC cl
  !SHL cl, cl
  !MOVZX cx, cl
  !MOVZX Rcx, cl
  !MOVZX cx, cl
  !MOV QWORD [v_RDM], Rcx
  PrintN("Nontallion based Beauty Wave Creater")
  PrintN("Setup ... WASAPI Shared volume 100")
  Repeat
    BeforeProcedureRegisters_SMSW
    BeforeProcedureRegisters_RDRAND
    SIMPLE_MOVE_REGISTERS_Up_and_Down  
    !NOP QWORD [Rip+16]
    !NOP QWORD [Rip]
    !NOP QWORD [Rip]
    !MOV Rcx, QWORD 0
    !MOV Rcx, QWORD 0
    !NOP QWORD [Rip-32]
    !INC cl
    !INC cl
    !INC cl
    !INC cl
    !SHL cl, cl
    !MOVZX cx, cl
    !MOVZX Rcx, cl
    !MOVZX cx, cl
    !CALL QWORD PB_Delay
    !INC QWORD [v_RN]
  Until RN>RDM
  BeforeProcedureRegisters_SMSW
  BeforeProcedureRegisters_RDRAND
  ASIO_ChannelSetVolume_Stabilizer_Pretime
  ; 123 @@
  !NOP QWORD [Rip+72]
  !NOP QWORD [Rip+88]
  !NOP QWORD [Rip+104]
  !NOP QWORD [Rip+120]
  !NOP QWORD [Rip+136]
  !NOP QWORD [Rip+152]
  !NOP QWORD [Rip+168]
  !NOP QWORD [Rip+184]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOVQ [v_RDM], mm5
  !EMMS
  If BASS_WASAPI_Init(RDM, RN, RN, RN, RN, RN, RN, RN)
    ; 123 @@ End
    WASAPI_ChannelSetVolume_Stabilizer
    WASAPI_ChannelSetVolume_Stabilizer
    WASAPI_ChannelSetVolume_Stabilizer
    BASS_WASAPI_Free()
  EndIf
  CloseConsole()
EndIf

End
BASS_WASAPI_SetVolume(RN, RN)
Delay(RN)
User avatar
NicTheQuick
Addict
Addict
Posts: 1527
Joined: Sun Jun 22, 2003 7:43 pm
Location: Germany, Saarbrücken
Contact:

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by NicTheQuick »

Sorry, but can you explain a little better what this is supposed to do? I can't test it on Linux anyway, but it looks like I can set some volume. I just absolutely don't understand what this is supposed to do with high volume and low noise. After all, that's what the sound card does, not software.
The english grammar is freeware, you can use it freely - But it's not Open Source, i.e. you can not change it or publish it in altered way.
User avatar
idle
Always Here
Always Here
Posts: 6023
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by idle »

NicTheQuick wrote: Sat Oct 21, 2023 11:12 am Sorry, but can you explain a little better what this is supposed to do? I can't test it on Linux anyway, but it looks like I can set some volume. I just absolutely don't understand what this is supposed to do with high volume and low noise. After all, that's what the sound card does, not software.
Its not a tip a trick but it's top class delusional twaddle.
Little John
Addict
Addict
Posts: 4802
Joined: Thu Jun 07, 2007 3:25 pm
Location: Berlin, Germany

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by Little John »

idle wrote: it's top class delusional twaddle.
This is one of those English expressions I didn't learn at school. :wink:
User avatar
idle
Always Here
Always Here
Posts: 6023
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by idle »

Little John wrote: Sun Oct 22, 2023 6:06 am
idle wrote: it's top class delusional twaddle.
This is one of those English expressions I didn't learn at school. :wink:
It's a bit like schwafeln 🤪 in German. I really find German is the most amusing language.
Little John
Addict
Addict
Posts: 4802
Joined: Thu Jun 07, 2007 3:25 pm
Location: Berlin, Germany

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by Little John »

Mark Twain wrote: My philological studies have satisfied me that a gifted person ought to learn English (barring spelling and pronouncing) in thirty hours, French in thirty days, and German in thirty years. It seems manifest, then, that the latter tongue ought to be trimmed down and repaired. If it is to remain as it is, it ought to be gently and reverently set aside among the dead languages, for only the dead have time to learn it.
:lol:
User avatar
idle
Always Here
Always Here
Posts: 6023
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by idle »

Little John wrote: Sun Oct 22, 2023 7:45 am
Mark Twain wrote: My philological studies have satisfied me that a gifted person ought to learn English (barring spelling and pronouncing) in thirty hours, French in thirty days, and German in thirty years. It seems manifest, then, that the latter tongue ought to be trimmed down and repaired. If it is to remain as it is, it ought to be gently and reverently set aside among the dead languages, for only the dead have time to learn it.
:lol:
:lol:
Olli
Addict
Addict
Posts: 1256
Joined: Wed May 27, 2020 12:26 pm

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by Olli »

:shock:

Ow my friend... I never watched such a parody... :mrgreen:
Sure you are not the direct author of this broken jam jar.

I think there are more sophisticated settings than MMX to check...

That's incredible ! :lol:
Olli
Addict
Addict
Posts: 1256
Joined: Wed May 27, 2020 12:26 pm

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by Olli »

There is several small messages, using all these ASM details, which, if we had the time, would drive us to interesting subjects.
User avatar
Piero
Addict
Addict
Posts: 1040
Joined: Sat Apr 29, 2023 6:04 pm
Location: Italy

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by Piero »

Mark Twain wrote: My philological studies have satisfied me that a gifted person ought to learn English (barring spelling and pronouncing) in thirty hours, French in thirty days, and German in thirty years. It seems manifest, then, that the latter tongue ought to be trimmed down and repaired. If it is to remain as it is, it ought to be gently and reverently set aside among the dead languages, for only the dead have time to learn it.
:lol:
You suckers made me remember of a Great German Friend (and colleague, here in Italy)...
We were always making fun of each other's Language (e.g.: Gestalte, Gesauger... and you have no idea of the pronounce...)
He was fascinated by the Italian expression "Ma dai!?" (I would GENERALLY translate it with "Are you serious?", or "You are kidding me!"...... but in Italian.........)
Oh, well... SAUERKRAUTS!
User avatar
mk-soft
Always Here
Always Here
Posts: 6314
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: WasapiSharedVolumeStabilizer for Visual Audio

Post by mk-soft »

I don't find German difficult. I've been learning it for over 50 years. 8)
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Post Reply