@@ -626,7 +626,6 @@ func (a *Audio) refreshSinks() {
626626 sinkInfoMap := make (map [uint32 ]* pulse.Sink )
627627 sinkInfoList := a .ctx .GetSinkList ()
628628
629- hasNullSink := false
630629 for _ , sinkInfo := range sinkInfoList {
631630 if sinkInfo .Name == dndVirtualSinkName {
632631 port := pulse.PortInfo {
@@ -638,9 +637,6 @@ func (a *Audio) refreshSinks() {
638637 sinkInfo .Ports = append (sinkInfo .Ports , port )
639638 sinkInfo .ActivePort = port
640639 }
641- if sinkInfo .Name == nullSinkName {
642- hasNullSink = true
643- }
644640 sinkInfoMap [sinkInfo .Index ] = sinkInfo
645641 sink , exist := a .sinks [sinkInfo .Index ]
646642 if exist {
@@ -663,11 +659,6 @@ func (a *Audio) refreshSinks() {
663659 delete (a .sinks , key )
664660 }
665661 }
666-
667- // 加载module-null-sink,噪音抑制时,将sink-input端口Echo-Cancel Playback引入到null-sink
668- if ! hasNullSink {
669- a .LoadNullSinkModule ()
670- }
671662}
672663
673664func (a * Audio ) refreshSources () {
@@ -795,6 +786,8 @@ func (a *Audio) init() error {
795786 if err != nil {
796787 return err
797788 }
789+ // 加载module-null-sink,噪音抑制时,将sink-input端口Echo-Cancel Playback引入到null-sink
790+ a .LoadNullSinkModule ()
798791
799792 // 更新本地数据
800793 a .refresh ()
@@ -1328,9 +1321,14 @@ func (a *Audio) refreshBluetoothOpts() {
13281321func (a * Audio ) updateDefaultSink (sinkName string ) {
13291322 sinkInfo := a .getPhySinkInfoByName (sinkName )
13301323 if sinkInfo == nil {
1331- logger . Warning ( "failed to get sinkInfo for name:" , sinkName )
1324+ // 如果是null-sink再检查一次,是否可以自动切换端口
13321325 a .setPropDefaultSink ("/" )
13331326 a .defaultSink = nil
1327+ if strings .Contains (sinkName , "null-sink" ) {
1328+ a .autoSwitchOutputPort ()
1329+ } else {
1330+ logger .Warning ("failed to get sinkInfo for name:" , sinkName )
1331+ }
13341332 return
13351333 }
13361334 a .moveSinkInputsToSink (nil )
@@ -1391,9 +1389,13 @@ func (a *Audio) updateDefaultSink(sinkName string) {
13911389func (a * Audio ) updateDefaultSource (sourceName string ) {
13921390 sourceInfo := a .getPhySourceInfoByName (sourceName )
13931391 if sourceInfo == nil {
1394- logger .Warning ("failed to get sourceInfo for name:" , sourceName )
13951392 a .setPropDefaultSource ("/" )
13961393 a .defaultSource = nil
1394+ if strings .Contains (sourceName , "null-sink" ) {
1395+ a .autoSwitchInputPort ()
1396+ } else {
1397+ logger .Warning ("failed to get sourceInfo for name:" , sourceName )
1398+ }
13971399 return
13981400 }
13991401 if a .defaultSource != nil && a .defaultSource .Name == sourceName {
@@ -1867,7 +1869,9 @@ func (a *Audio) handleVolumeIncrease() {
18671869}
18681870
18691871func (a * Audio ) LoadNullSinkModule () {
1870- a .context ().LoadModule (nullSinkModuleName , "" )
1872+ if ! a .isModuleExist (nullSinkModuleName ) {
1873+ a .ctx .LoadModule (nullSinkModuleName , "" )
1874+ }
18711875}
18721876
18731877func (a * Audio ) unsetReduceNoise () {
0 commit comments