Выберите PCM alsa по умолчанию (не карту) с помощью переменной среды.

Я часто использую гарнитуру, чтобы выбрать, использовать ли гарнитуру или обычную звуковую карту, я использую переменную среды благодаря этому коду в ~/.asound.rc:

@args.CARD {
  type string
  default {
    @func getenv
    vars {
      0 ALSA_CARD
    }
    default {
      @func refer
      name 'defaults.pcm.card'
    }
  }
}

К сожалению, новая гарнитура (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"
  }
}

PCM работает, но как я могу использовать его через переменную среды? На данный момент переменная env принимает только имена карт. Вероятно, это что-то около -- name 'defaults.pcm.card' -- строки, но я не могу это исправить.

Я знаю, что могу изменить pcm.HeadsetSwapped на pcm.!default, но мне не хотелось бы редактировать файл каждый раз, когда я хочу запустить программу...


person Paolo.Bolzoni    schedule 14.06.2013    source источник


Ответы (1)


Используйте что-то вроде этого и установите для переменной среды MY_DEVICE значение hw или 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
}
person CL.    schedule 14.06.2013
comment
Спасибо, работает идеально. И это хорошо читается, что необычно для материалов, связанных с alsa. - person Paolo.Bolzoni; 14.06.2013
comment
Подсказка: если вы нажмете «Устройство или ресурс, занятый аппаратным обеспечением по умолчанию», попробуйте dmix по умолчанию. Я просто попал в эту ловушку. - person Bodo Thiesen; 04.06.2020