Mengatur perangkat ALSA default untuk Pulseaudio

8

Baru-baru ini saya mendapatkan kartu suara eksternal / DAC (Fiio E17) dan saat ini saya mencoba untuk mengkonfigurasi dengan benar pada instalasi Ubuntu 12.04 saya. Ketika menghubungkannya melalui USB, itu langsung dikenali dan muncul sebagai perangkat baru dalam pengaturan audio. Pemutaran juga berfungsi dengan baik (kecuali untuk beberapa masalah kecil terkait volume, yang berada di luar cakupan pertanyaan ini).

Namun, ketika mencoba menguji pemutaran 24 bit / 96 kHz dengan memutar file audio seperti itu mplayer, saya mengalami masalah kecil:

Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 96000 Hz, 2 ch, s24le, 4608.0 kbit/100.00% (ratio: 576000->576000)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
AO: [pulse] 96000Hz 2ch s16le (2 bytes per sample)

Seperti yang dapat dilihat dari output, walaupun file yang diputar memang mengandung audio 24 bit / 96 kHz, file tersebut di-resampled menjadi 16 bit sebelum diputar. Memainkan file yang sama dengan aplaymenunjukkan alasannya:

Playing WAVE 'sr003-02-2496.wav' : Signed 24 bit Little Endian in 3bytes, Rate 96000 Hz, Stereo
aplay: set_params:1081: Sample format non available
Available formats:
- U8
- S16_LE
- S16_BE
- S32_LE
- S32_BE
- FLOAT_LE
- FLOAT_BE
- MU_LAW
- A_LAW

Namun, /proc/asound/card1/stream0mengonfirmasi bahwa perangkat keras memang mendukung 24 bit:

FiiO FiiO USB DAC-E17 at usb-0000:00:1a.0-1.1, full speed : USB Audio

Playback:
  Status: Running
    Interface = 3
    Altset = 1
    Packet Size = 388
    Momentary freq = 44100 Hz (0x2c.199a)
  Interface 3
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 3 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000, 96000
  Interface 3
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 3 OUT (ADAPTIVE)
    Rates: 32000, 44100, 48000, 96000

Pada titik ini saya perhatikan bahwa pada tab perangkat keras pengaturan suara, saya dapat memilih dua profil berbeda untuk kartu suara: Digital Stereo (IEC958) dan Analog Stereo. Beralih di antara keduanya tidak menghasilkan perubahan apa pun, sejauh yang saya tahu.

Menentukan perangkat ALSA memang membantu (yaitu, aplay -Dhw:1,0 sr003-02-2496.wavberfungsi dengan baik dan memutar file tanpa resampling). Tetapi karena Pulseaudio hanya menunjukkan satu perangkat Fiio / tenggelam dalam pengaturan suara, saya tidak yakin bagaimana saya akan memberitahu Pulseaudio untuk menggunakan perangkat ALSA hw:1,0. Menambahkan load-module module-alsa-source device=hw:1,0untuk /etc/pulse/default.pahasil di PulseAudio batal dengan module.c: Failed to load module "module-alsa-source" (argument: "device=hw:1,0"): initialization failed.saat startup.

Jadi, itulah pengantar, inilah pertanyaan aktual saya :

  • Bagaimana cara mengetahui perangkat ALSA yang sebenarnya digunakan Pulseaudio saat saya memilih Fiio E17 dalam pengaturan suara?
  • Bagaimana cara saya memberi tahu Pulseaudio untuk menggunakan perangkat ALSA hw: 1,0 ketika memilih Fiio E17 dalam pengaturan suara saya?

Beberapa informasi debug (semoga bermanfaat):

tmnt
sumber
Apa itu mplayerdan aplaybaris perintah?
CL.
@CL. Saya menjalankan mplayer -ao alsa:device=hw=1.0 sr003-02-2496.wavdan aplay -Dhw:1,0 sr003-02-2496.wavmenggunakan perangkat yang benar, jika itu yang Anda minta.
tmnt
Saya bertanya tentang panggilan yang tidak berfungsi. Dan apakah Anda ingin menggunakan PulseAudio atau tidak?
CL.
@CL. Ah, maaf, itu hanya panggilan normal tanpa bendera, itu aplay sr003-02-2496.wavdan mplayer sr003-02-2496.wav. Dan ya, saya ingin menggunakan PulseAudio jika memungkinkan.
tmnt

Jawaban:

8

Menjawab dua pertanyaan:

Anda dapat memilih perangkat default di PulseAudio dengan GUI seperti kontrol volume GNOME, pavucontrol, atau dari baris perintah menggunakan pacmd set-default-sink.

Secara default, PulseAudio membuka perangkat dengan frekuensi 44,1 kHz atau 48 kHz, yang mana yang menyebabkan upaya resampling yang lebih rendah (jadi audio 96 kHz biasanya akan menyebabkan perangkat dibuka pada 48 kHz. Selain itu, kami membuka perangkat untuk S16LE secara default.

Sekarang, Anda memiliki dua opsi. Jika Anda hanya ingin memutar beberapa file dalam format asli mereka, paplay --passthrough <file>lakukan pekerjaan itu untuk Anda. Anda bahkan dapat menentukan perangkat mana yang digunakan.

Opsi lainnya adalah membuat PA menggunakan 96/24 secara global. Anda dapat mengubahnya di /etc/pulse/default.conf( alternate-sample-rate = 96000, default-sample-format=s24-32le). Ini akan menyebabkan penggunaan CPU yang lebih besar. Ini adalah situasi yang konyol, harus menerapkan konfigurasi global untuk semua perangkat. Kami berencana untuk menambahkan konfigurasi per perangkat di beberapa titik.

Catatan, setelah ini, Anda hanya harus menggunakan backend mplayer PulseAudio daripada meminta mplayer berbicara dengan ALSA dan kemudian ALSA ke PulseAudio. Anda dapat melakukannya dengan mplayer -ao pulse ...dan jika Anda ingin mengaturnya secara permanen, tambahkan ao=pulseke ~/.mplayer/config.

Arun Raghavan
sumber
Terima kasih banyak atas bantuannya! pacmd set-default-sinkhanya memungkinkan saya mengatur salah satu wastafel yang terdaftar pacmd list-sinks, kan? Meskipun saya kira bagian kedua dari jawaban Anda membuat pertanyaan itu masih bisa diperdebatkan;) Jadi jika saya mengerti Anda dengan benar, Pulseaudio tidak mendukung perpindahan dinamis antara 24 dan 16 bit? Setelah mengubah saya default.conf, mplayer tampaknya masih mencoba ulang semuanya menjadi 16 bit sebelum menyerahkannya ke pulsa ( lihat di sini ), apakah itu karena apa yang CL. jelaskan dalam jawabannya?
tmnt
Oh, dan paplaysepertinya tidak suka file audio saya :) Memutar file 24 bit mengarah ke segfault Code should not be reached at pulsecore/sndfile-util.c:391, function pa_sndfile_readf_function(). Aborting., dan memainkan file 32bit bahkan membuat crash Pulseaudio .
tmnt
4

Setelah pembaruan ke 13.10 Pulseaudio default ke HDMI, mungkin karena saya memiliki monitor tambahan yang terpasang pada laptop saya (Lenovo T430S) melalui port mini-display saya. Situs web archlinux memberikan jawaban yang manis dan singkat untuk mengatur ulang atau mengatur default:

  • masuk dan ubah output default menjadi analog

  • Lari

    $ aplay -l

dan menemukan bahwa analog adalah kartu 0

  • Lari

    daftar $ pacmd

dan temukan garis:

active profile: <output:analog-stereo+input:analog-stereo>

"output: analog-stereo + input: analog-stereo" adalah nama profil saya, jadi tambahkan

set-card-profile 0 output:analog-stereo+input:analog-stereo

di /etc/pulse/default.pa dan simpan

  • restart pulseaudio
pengguna235147
sumber
2

Format sampel yang digunakan dalam antarmuka antara aplikasi dan PulseAudio tidak selalu terkait langsung dengan format sampel yang digunakan PulseAudio untuk mengakses perangkat perangkat keras.

S24_3LEbukan salah satu format aplikasi yang didukung PulseAudio (seperti yang ditunjukkan dalam aplayoutput). Untuk memungkinkan aplikasi dengan format yang tidak biasa dijalankan dengan PulseAudio, tambahkan plugin yang melakukan konversi format otomatis jika perlu untuk perangkat PCM default di .asoundrc:

pcm.!default {
    type linear
    slave.pcm pulse
}
CL.
sumber
Terima kasih atas bantuan Anda, tetapi saya khawatir ini tidak mengubah apa pun. Bahkan setelah menambahkan ini ke saya .asoundrc, mplayermasih menurunkan audio ke 16 bit (yaitu output terlihat sama dengan yang diposting dalam pertanyaan saya) dan /proc/asound/card1/stream0masih menunjukkan altset yang salah digunakan. Jika itu benar-benar masalah dengan format yang didukung PA, tidak boleh mplayermengurangi audio bahkan ketika menentukan perangkat ALSA, karena masih menggunakan Pulseaudio?
tmnt
Apakah aplayberhasil sekarang? Tampaknya ini adalah bug di mplayer.
CL.
Tidak, aplaymasih gagal dengan output yang sama. Saya perhatikan sekarang bahwa dengan mengatur default-sample-format = s24-32ledi saya, .pulse/daemon.confsaya dapat memaksa PA untuk menggunakan perangkat output yang benar. Namun, mplayermasih mengubah sampel audio, dan aplaymasih gagal ketika mencoba memutar file audio 24 bit, jadi saya kira ini tidak membantu juga.
tmnt
2

Hanya solusi cepat yang saya temukan menggunakan Lubuntu Trusty Tahr dengan Fiio E17 saya terhubung melalui USB: Saya juga bertanya-tanya tentang bitrate, itu sebabnya saya menemukan posting ini di sini. Tapi karena saya mendengarkan musik di Netbook yang agak lama, saya tidak ingin mengaturnya ke 96/24 secara default (cpu bukan yang tercepat) Namun, yang berhasil bagi saya adalah menggunakan VLC, dan menentukan dalam pengaturan audio ahli untuk menggunakan modul ALSA untuk output, dan kemudian menggunakan perangkat output berikut: "Fiio USB DAC-E17, perangkat perangkat keras USB Audio Direct tanpa konversi apa pun"

Dengan cara ini, saya dapat mengeluarkan suara 96/24 ke Fiio melalui USB ketika saya inginkan (juga ditampilkan di layar kecil Fiio) - dan saya tidak perlu mengubah sesuatu yang lebih mendasar di OS. Pemain suka audacious atau browser masih menggunakan output default pulseaudio. Kadang-kadang VLC mengatakan bahwa perangkat tersebut sudah digunakan - kemudian tutup saja perangkat lunak lain seperti audacious, yang menggunakan misalnya keluaran pulseaudio, dan itu seharusnya berfungsi.

salam, Andi

Dan saya
sumber
Lihat juga: askubuntu.com/questions/334626/…
landroni
1

Inilah jawaban yang benar untuk pertanyaan ini:

Dari ArchWiki

Tentukan perangkat ALSA hw yang ingin Anda gunakan. Kemudian tambahkan ini ke file default.pa Anda. (Ubah 0,0 agar sesuai dengan perangkat Anda.)

load-module module-alsa-sink device=hw:0,0
Hydranix
sumber
1

Menambahkan load-module module-alsa-source device=hw:1,0untuk /etc/pulse/default.paadalah pendekatan yang benar. Namun, modul berikut harus dibongkar untuk menghindari konflik perangkat ( initialization failedkesalahan yang Anda dapatkan):

  • module-udev-detect
  • modul-deteksi

Perhatikan baik-baik Anda /etc/pulse/default.padan hapus baris yang berisi modul-modul itu. Juga, dalam hal ini perangkat tidak dapat dideteksi secara otomatis, jadi Anda ingin memuat module-alsa-sinkuntuk menentukan wastafel secara manual juga.

Huan Zhang
sumber
Apakah akan ada konflik deteksi pemutaran (wastafel) jika hanya perangkat penangkapan (sumber) yang dimuat secara manual?
Lucas