Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 16 additions & 12 deletions audio1/audio.go
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,6 @@ func (a *Audio) refreshSinks() {
sinkInfoMap := make(map[uint32]*pulse.Sink)
sinkInfoList := a.ctx.GetSinkList()

hasNullSink := false
for _, sinkInfo := range sinkInfoList {
if sinkInfo.Name == dndVirtualSinkName {
port := pulse.PortInfo{
Expand All @@ -638,9 +637,6 @@ func (a *Audio) refreshSinks() {
sinkInfo.Ports = append(sinkInfo.Ports, port)
sinkInfo.ActivePort = port
}
if sinkInfo.Name == nullSinkName {
hasNullSink = true
}
sinkInfoMap[sinkInfo.Index] = sinkInfo
sink, exist := a.sinks[sinkInfo.Index]
if exist {
Expand All @@ -663,11 +659,6 @@ func (a *Audio) refreshSinks() {
delete(a.sinks, key)
}
}

// 加载module-null-sink,噪音抑制时,将sink-input端口Echo-Cancel Playback引入到null-sink
if !hasNullSink {
a.LoadNullSinkModule()
}
}

func (a *Audio) refreshSources() {
Expand Down Expand Up @@ -795,6 +786,8 @@ func (a *Audio) init() error {
if err != nil {
return err
}
// 加载module-null-sink,噪音抑制时,将sink-input端口Echo-Cancel Playback引入到null-sink
a.LoadNullSinkModule()

// 更新本地数据
a.refresh()
Expand Down Expand Up @@ -1328,9 +1321,14 @@ func (a *Audio) refreshBluetoothOpts() {
func (a *Audio) updateDefaultSink(sinkName string) {
sinkInfo := a.getPhySinkInfoByName(sinkName)
if sinkInfo == nil {
logger.Warning("failed to get sinkInfo for name:", sinkName)
// 如果是null-sink再检查一次,是否可以自动切换端口
a.setPropDefaultSink("/")
a.defaultSink = nil
if strings.Contains(sinkName, "null-sink") {
a.autoSwitchOutputPort()
} else {
logger.Warning("failed to get sinkInfo for name:", sinkName)
}
return
}
a.moveSinkInputsToSink(nil)
Expand Down Expand Up @@ -1391,9 +1389,13 @@ func (a *Audio) updateDefaultSink(sinkName string) {
func (a *Audio) updateDefaultSource(sourceName string) {
sourceInfo := a.getPhySourceInfoByName(sourceName)
if sourceInfo == nil {
logger.Warning("failed to get sourceInfo for name:", sourceName)
a.setPropDefaultSource("/")
a.defaultSource = nil
if strings.Contains(sourceName, "null-sink") {
a.autoSwitchInputPort()
} else {
logger.Warning("failed to get sourceInfo for name:", sourceName)
}
return
}
if a.defaultSource != nil && a.defaultSource.Name == sourceName {
Expand Down Expand Up @@ -1867,7 +1869,9 @@ func (a *Audio) handleVolumeIncrease() {
}

func (a *Audio) LoadNullSinkModule() {
a.context().LoadModule(nullSinkModuleName, "")
if !a.isModuleExist(nullSinkModuleName) {
a.ctx.LoadModule(nullSinkModuleName, "")
}
}

func (a *Audio) unsetReduceNoise() {
Expand Down
20 changes: 12 additions & 8 deletions audio1/audio_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,13 @@ func (a *Audio) autoSwitchOutputPort() bool {
auto, cardId, portName := a.checkAutoSwitchOutputPort()
if auto {
if cardId == 0 || portName == "" {
if !a.isModuleExist(nullSinkModuleName) {
a.ctx.LoadModule(nullSinkModuleName, "")
if !strings.Contains(a.ctx.GetDefaultSink(), "null-sink") {
a.LoadNullSinkModule()
logger.Info("no prefer port, set default sink to", nullSinkName)
a.ctx.SetDefaultSink(nullSinkName)
} else {
logger.Info("no prefer port, default sink is null-sink already")
}
logger.Info("no prefer port, set defaut sink to", nullSinkName)
a.ctx.SetDefaultSink(nullSinkName)
return true
} else {
err := a.setPort(cardId, portName, pulse.DirectionSink, true)
Expand Down Expand Up @@ -269,11 +271,13 @@ func (a *Audio) autoSwitchInputPort() bool {
auto, cardId, portName := a.checkAutoSwitchInputPort()
if auto {
if cardId == 0 || portName == "" {
if !a.isModuleExist(nullSinkModuleName) {
a.ctx.LoadModule(nullSinkModuleName, "")
if !strings.Contains(a.ctx.GetDefaultSource(), "null-sink") {
a.LoadNullSinkModule()
logger.Info("no prefer port, set default source to", nullSinkName)
a.ctx.SetDefaultSource(nullSinkName + ".monitor")
} else {
logger.Info("no prefer port, default source is null-sink already")
}
logger.Info("no prefer port, set defaut source to", nullSinkName)
a.ctx.SetDefaultSource(nullSinkName + ".monitor")
return true
} else {
err := a.setPort(cardId, portName, pulse.DirectionSource, true)
Expand Down