通过环境变量选择默认的 alsa PCM(非卡)

Pao*_*oni 3 linux audio alsa

我经常使用耳机,选择是使用耳机还是普通声卡我使用环境变量,这要归功于 ~/.asound.rc 中的以下代码:

@args.CARD {
  type string
  default {
    @func getenv
    vars {
      0 ALSA_CARD
    }
    default {
      @func refer
      name 'defaults.pcm.card'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,新耳机 (hw:Set) 的频道颠倒了,所以我创建了一个 pcm 来修复,将这些行添加到 ~/.asoundrc:

pcm.swapped {
    type  route
    slave {
        pcm "hw:Set"
    }
    ttable.0.1   1
    ttable.1.0   1
}


pcm.HeadsetSwapped {
  type plug
  slave {
    pcm "pcm.swapped"
  }
}
Run Code Online (Sandbox Code Playgroud)

pcm 有效,但我如何决定通过环境变量使用它?目前 env 变量只接受卡片名称。它可能与 -- name 'defaults.pcm.card' -- 行有关,但我无法修复它。

我知道我可以将 pcm.HeadsetSwapped 更改为 pcm.!default,但我想避免每次要启动程序时都编辑文件...

CL.*_*CL. 5

使用这样的东西,并将环境变量MY_DEVICE设置为hwor swapped

pcm.!default {
    type plug
    slave.pcm {
        @func getenv
        vars [ MY_DEVICE ]
        default "hw"
    }
}
pcm.swapped {
    type route
    slave.pcm "hw:Set"
    ttable.0.1 1
    ttable.1.0 1
}
Run Code Online (Sandbox Code Playgroud)