Thiết bị đầu ra âm thanh, chuyển đổi nhanh?


19

Tùy thuộc vào tình huống, tôi sử dụng loa hoặc tai nghe của mình để phát âm thanh. Cho rằng tai nghe của tôi là tai nghe USB, nó hoạt động như một thiết bị âm thanh của riêng nó.

Hiện tại tôi chuyển đổi giữa các thiết bị đầu ra âm thanh bằng cách nhấp vào biểu tượng loa ở khay phía trên bên phải, nơi tôi chọn Cài đặt âm thanh, đi đến tab Đầu ra và ở đó chọn thiết bị tôi muốn.

Điều tôi băn khoăn là liệu có thể có một cách dễ dàng / nhanh chóng hơn để chuyển đổi qua lại với tai nghe USB của tôi không? Có lẽ một biểu tượng khay chuyên dụng, ánh xạ chính, hoặc như vậy?

Tôi đang chạy Ubuntu 10.04, với máy tính để bàn Gnome mặc định.

Câu trả lời:


11

Để thay đổi thiết bị đầu ra âm thanh mặc định từ dòng lệnh, bạn có thể sử dụng pacmdtiện ích dòng lệnh Pulse Audio.

Tôi thấy cần phải làm tương tự ngày hôm nay, muốn chuyển đổi giữa tai nghe và loa, cả hai cắm vào các thẻ âm thanh riêng biệt. Đây là kịch bản shell tôi đã viết để làm như vậy:

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

Ghi chú:

  • Điều này hoán đổi giữa hai thiết bị đầu ra âm thanh đầu tiên mà pacmdtiện ích liệt kê. Nếu bạn có nhiều hơn hai thiết bị âm thanh và muốn trao đổi sang một thiết bị khác, bạn sẽ cần thay thế logic trên dòng 7 bằng một số điều kiện.
  • Chỉ cần hoán đổi thiết bị chìm mặc định không làm gì cho các ứng dụng hiện đang chạy - chúng sẽ tiếp tục xuất ra thiết bị trước đó. Kịch bản này cũng di chuyển đích chìm cho tất cả các đầu vào hiện có. Tức là, nếu bạn chạy tập lệnh này với nhạc phát trên một thiết bị, nó sẽ ngay lập tức hoán đổi sang thiết bị khác. Nếu bạn muốn các ứng dụng hiện có tiếp tục trên thiết bị trước đó, hãy nhận xét dòng cuối cùng (và dòng 5, nếu bạn muốn).

7

Chà, bạn có thể cài đặt pavucontrol, nó hiển thị các ứng dụng có lựa chọn thiết bị âm thanh trên tab đầu tiên, nó sẽ giúp bạn tiết kiệm một số nỗ lực. Nhưng điều bạn thực sự muốn tôi nghĩ là đánh dấu tai nghe USB của bạn là thiết bị mặc định, sau đó mỗi khi bạn cắm nó vào tất cả âm thanh sẽ được chuyển hướng đến nó và khi bạn cắm nó ra - nó sẽ trở lại loa. Nỗ lực, thực sự.


2
Làm thế nào để bạn thiết lập thiết bị mặc định trong Ubuntu Precise?
xanh

3

Câu hỏi khá cũ nhưng câu trả lời của tôi vẫn có thể hữu ích cho người dùng Gnome 2. Tôi đã sử dụng Applet PulseAudio cho vấn đề chính xác được mô tả ở đây. Bạn có thể thay đổi thiết bị đầu vào và đầu ra ngay trong menu bảng điều khiển. Đó là cách thuận tiện nhất mà tôi tìm thấy.


3

Tất nhiên các thiết bị chuyển mạch bằng cách sử dụng Applet cũng hoạt động tốt. Nhưng điều thú vị khi viết kịch bản là nó siêu nhanh. Tôi đặt ví dụ của tôi trên phím tắt alt + s. do đó, khi tôi muốn chuyển từ tai nghe sang loa, tôi chỉ cần nhấn alt + s.

Dù sao. Andrew nói:

Nếu bạn có nhiều hơn hai thiết bị âm thanh và muốn trao đổi sang một thiết bị khác, bạn sẽ cần thay thế logic trên dòng 7 bằng một số điều kiện.

Đó là những gì tôi đã làm. Tôi chia sẻ nó, trong trường hợp ai đó gặp rắc rối với nó:

#!/usr/bin/env bash

#sinks=($(pacmd list-sinks | grep index | \
#    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

#find active sink
active=0
for i in ${sinks[*]}
do
    if [ $i -eq 0 ]
        then active=$((active+1))
        else break
    fi
done

#switch to next sink
swap=$(((active+1)%${#sinks[@]}))

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

Những gì tôi đã làm khác nhau là a) tìm thấy hoạt động chìm trong một vòng lặp for. Và b) chuyển sang bồn tiếp theo bằng cách tăng chỉ số thêm 1. Sau đó, tôi điều chỉnh kết quả theo số lần chìm. Điều đó đảm bảo rằng ví dụ: khi có 3 bồn, (2 + 1)% 3 = 0. Do đó, từ chỉ số chìm 2, chúng tôi sẽ chuyển sang chỉ số chìm 0.

Theo cách này, công tắc cho phép di chuyển lên trên qua các bồn có sẵn.


2

Cảm ơn các kịch bản! Tôi đã thêm một phần cho đầu vào (micrô) cũng như trong trường hợp bất kỳ ai muốn sử dụng nó:

while read line ; do
  case $line in 
    *\*\ index*) x=1 ;;
    index*) x=0 ;;
    name*) 
      source=$(echo $line | sed -e "s/.*<//;s/>.*//")
      if [[ $x = "0" ]] ; then
        pacmd set-default-source $source &> /dev/null
      fi ;;
  esac
done < <(pacmd list-sources | grep -e alsa_input -e index)

2

Để duyệt qua danh sách các thiết bị âm thanh của bạn, hãy sử dụng tập lệnh sau:

#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-    synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;

Tất cả tín dụng được chuyển đến tsvetan từ diễn đàn Ubuntu .


1

Tôi đang tìm cách để làm điều này để chuyển đổi giữa các loa bên trong trên máy tính xách tay của tôi và một trạm cơ sở của sân bay apple được cắm vào âm thanh nổi của tôi. Tôi quyết định gán phím nóng để chuyển đổi. Tôi muốn cửa sổ tùy chọn âm thanh bật lên trong một giây để xác nhận trực quan về công tắc và sử dụng wmctrl để đóng cửa sổ sau đó.

.

Tôi đã sử dụng 2 tập lệnh (gần như giống hệt nhau) sau đây:

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 1
sleep .8 
wmctrl -c "Sound Preferences"
exit

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 0
sleep .8 
wmctrl -c "Sound Preferences"
exit

Đầu tiên thay đổi cho trạm gốc apple (mà tôi đã gán cho ctrl + F9) và trạm thứ hai chuyển trở lại loa bên trong (ctrl + F8). Điều này giả định rằng đây là 2 thiết bị đầu ra duy nhất được cài đặt.


1

Tôi đã xây dựng kịch bản của Andrew để làm cho nó sử dụng notify-osd để thông báo những gì nó vừa làm. Chỉnh sửa các dòng với tên sau khi bạn cần.

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap 

for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

if [ "$swap" = "0" ]; then
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!" 

else
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!" 

fi


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.