Emulasi Pulseaudio untuk ALSA.
Program ini menyediakan implementasi parsial alternatif dari Pulseaudio API. Ini terdiri dari skrip loader dan sejumlah perpustakaan bersama dengan nama yang sama seperti dari Pulseaudio asli, sehingga aplikasi dapat secara dinamis memuatnya dan berpikir mereka berbicara dengan Pulseaudio. Secara internal, tidak ada daemon pencampuran suara terpisah. Sebagai gantinya, Apulse mengandalkan dmix , dsnoop , dan plug ALSA untuk menangani beberapa sumber suara dan menangkap aliran yang berjalan pada saat yang sama. dmix plugin mux beberapa aliran pemutaran; Plugin dsnoop memungkinkan beberapa aplikasi untuk menangkap dari satu mikrofon; dan plug plugin secara transparan mengonversi audio antara berbagai format sampel, laju sampel dan nomor saluran. Selama lebih dari satu dekade sekarang, ALSA dilengkapi dengan plugin ini diaktifkan dan dikonfigurasi secara default.
apulse tidak dirancang untuk menjadi pengganti drop-in Pulseaudio. Ini tidak ada gunanya, karena itu hanya akan diterapkan kembali dari pulseaudio asli, dengan arsitektur klien-daemon yang sama, yang diperlukan oleh set fitur lengkap. Sebaliknya, hanya bagian API yang penting untuk aplikasi spesifik yang diimplementasikan. Itu sebabnya ada skrip loader, bernama apulse . Ini memperbarui nilai variabel lingkungan LD_LIBRARY_PATH untuk menunjuk juga ke direktori di mana perpustakaan Apulse diinstal, membuatnya tersedia untuk aplikasi.
Nama berasal dari nama ALSA dan Pulseaudio. Karena aoss adalah lapisan kompatibilitas antara program OSS dan ALSA, apulse dirancang untuk menjadi lapisan kompatibilitas antara aplikasi pulseaudio dan ALSA.
Anda memerlukan perpustakaan ALSA dan terpasang glib. Pada distribusi yang berbasis di Debian, mereka berada dalam paket libasound2-dev dan libglib2.0-dev .
Untuk membangun dan menginstal, jalankan di direktori sumber:
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Itu akan membuat direktori bernama build , dan membangun di sana. Dimungkinkan untuk menginstal hanya dengan menjalankan make install sebagai root , seperti yang ditunjukkan di atas. Tetapi Anda tidak akan dapat menghapus instalan file yang diinstal. Itu sebabnya disarankan untuk membungkus file ke dalam paket. Gunakan checkinstall , atau alternatif.
Jika Anda menginginkan biner 32-bit pada mesin 64-bit (misalnya, untuk Skype), gunakan:
$ mkdir build && cd build
$ CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
$ make
# make install
Versi GLIB terbaru menggunakan file .pc yang berbeda untuk i386 dan amd64 . Untuk membantu pkg-config menemukan versi 32-bit, gunakan variabel PKG_CONFIG_PATH . Jadi, pada Debian itu akan menjadi sesuatu seperti:
$ PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CFLAGS=-m32 cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Ada cara untuk mengonfigurasi di mana pustaka apulse akan diinstal, melalui variabel cmake APULSEPATH . Misalnya, jika Anda ingin menginstal pustaka ke jalur default, /usr/lib , gunakan
cmake -DAPULSEPATH=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ..
Jika perpustakaan diinstal ke jalur perpustakaan biasa, Anda tidak perlu menjalankan aplikasi melalui pembungkus apulse .
$ apulse <program-name> [program-parameters]
Variabel lingkungan APULSE_CAPTURE_DEVICE dan APULSE_PLAYBACK_DEVICE dapat digunakan untuk mengonfigurasi perangkat penangkapan dan pemutaran. Coba hw:0,0 , plughw:0,0 dan sejenisnya. Lihat Panduan Pengguna ALSA untuk daftar lengkap nama perangkat.
Secara default, perpustakaan dari apulse diinstal ke direktori terpisah, untuk menyembunyikannya dari semua aplikasi.
Sebagian besar aplikasi di alam liar, yang mendukung Pulseaudio dan ALSA, mencoba untuk autodetect sistem suara mana yang digunakan. Pertama, aplikasi mencoba untuk memulai dengan Pulseaudio. Perpustakaan klien asli gagal lebih awal jika tidak ada daemon pulseaudio yang berjalan atau dapat dimulai. Kemudian mereka beralih ke ALSA. Keputusan dibuat sekali, di awal. Ini bekerja dengan baik dengan Pulseaudio, tetapi tidak bekerja dengan apulse . Yang terakhir tidak memiliki daemon, dengan senang hati mengatakan bahwa semuanya baik -baik saja, dan mampu bermain audio. Aplikasi kemudian mencoba memanggil lebih banyak fungsi, dan akhirnya menyentuh bagian yang tidak diterapkan, seringkali dengan crash. Jadi, perpustakaan disembunyikan, dan menjadi hanya terlihat ketika suatu program dipanggil melalui skrip pembungkus apulse .
Dimungkinkan untuk menginstal perpustakaan Apulse ke /usr/lib . Skrip pembungkus tidak akan diperlukan, tetapi kemudian semua aplikasi akan mencoba menggunakan Pulseaudio API, meskipun mereka dapat menggunakan ALSA.
Ada properti rpath dari format Executable ELF, yang digunakan untuk menentukan jalur untuk mencari perpustakaan dinamis. Ini seperti variabel ld_library_path, tetapi per-dieksekutasi. Karena semua skrip peluncur apulse adalah mengatur nilai LD_LIBRARY_PATH sebelum meluncurkan aplikasi, dimungkinkan untuk memanggang jalur ke perpustakaan Apulse ke target yang dapat dieksekusi sendiri. Dan untuk meluncurkannya seperti biasa, tanpa skrip penolong.
Misalnya, untuk Firefox itu:
# patchelf --set-rpath /usr/lib/apulse /usr/lib/firefox/libxul.so
Untuk beberapa alasan, itu tidak berhasil jika RPATH ditetapkan untuk /usr/lib/firefox/firefox itu sendiri, sehingga beberapa percobaan diperlukan untuk membuatnya bekerja.
Sebagian besar Pulseaudio API tidak diimplementasikan. Ada fungsi yang tidak melakukan apa pun dan mengembalikan beberapa nilai arbitrat. Seringkali, jika aplikasi mencoba memanggil sesuatu yang tidak diimplementasikan, itu macet saat mencoba mendereferensi pointer nol. Secara default, level penelusuran diatur ke 0 , yang berarti tidak ada pesan yang dicetak ke output standar. Dimungkinkan untuk meningkatkan nilai itu menjadi 1 , yang menunjukkan panggilan fungsi yang tidak diimplementasikan, atau ke 2 , yang menunjukkan semua panggilan fungsi.
Untuk mengubah level, gunakan parameter WITH_TRACE saat memanggil cmake . Sesuatu seperti cmake -DWITH_TRACE=1 ..
Membangun Apulse dengan Jejak Level 1 tidak akan memperbaiki masalah, tetapi setidaknya akan membantu mengidentifikasi apakah crash disebabkan oleh fungsi yang tidak diimplementasikan.
Apulse bertindak sebagai klien ALSA generik. Ia mencoba untuk membuka perangkat audio, dan terkadang gagal. Pada intinya, Apulse tidak mencampur audio atau resampling. Sebaliknya, ini bergantung pada plugin plug , dmix , dan dsnoop ALSA, yang biasanya diaktifkan secara default. Plugin ini menangani beberapa sumber audio, melakukan resampling dan pencampuran secara transparan. Selama bertahun -tahun sekarang ALSA dilengkapi dengan plugin yang diaktifkan. Audio hanya berfungsi tanpa mengkonfigurasi apa pun. Tetapi tidak semua orang menggunakan pengaturan default.
Pada konfigurasi khusus, Apulse mungkin gagal untuk mengeluarkan dan/atau menangkap audio. Tidak ada suara sama sekali, atau hanya satu aliran audio yang diputar sekaligus. Mungkin juga adaptor dengan mixer perangkat keras, yang mampu memainkan beberapa aliran, mungkin masih tidak dapat menangani beberapa aliran penangkapan. Bergantung pada perangkat keras, Anda mungkin masih membutuhkan plugin dmix atau dsnoop . Atau keduanya.
Dengan kata lain, agar Apulse bekerja, pengaturan Anda harus mampu bermain dan menangkap banyak aliran secara bersamaan.
Jika output aplikasi lain baik -baik saja, ada kemungkinan bahwa aplikasi yang Anda gunakan membatasi dirinya sendiri.
Misalnya, Firefox sekarang memiliki kotak pasir, yang memblokir akses file. Ini memiliki daftar jalur yang diizinkan, tetapi perangkat ALSA tidak termasuk secara default. Untungnya, dimungkinkan untuk menambahkan jalur itu dengan tangan. Tambahkan "/dev/snd/" ke "security.sandbox.content.write_path_whitelist" parameter di about:config . Perhatikan bahwa slash trailing di "/dev/snd/" diperlukan.
Firefox 58 (malam hari) mengencangkan kotak pasirnya sedikit lebih. Sekarang panggilan ioctl() dilarang juga, tetapi digunakan oleh perpustakaan ALSA. Itu menyebabkan pelanggaran kotak pasir dengan penghentian proses selanjutnya. Pengecualian dapat ditambahkan dengan mengatur parameter security.sandbox.content.syscall_whitelist di about:config . Bidang itu menerima daftar nomor panggilan sistem yang terpisah koma. Tambahkan di sana 16 untuk x86-64, atau 54 untuk x86 atau ARM.
Firefox 60 mengitari kontennya lebih banyak kotak pasir, tetapi pada saat yang sama memindahkan akses audio dari proses konten ke proses utama. Dari Firefox 60 dan seterusnya tidak ada perubahan pada pengaturan kotak pasir diperlukan.
Kode sumber didistribusikan berdasarkan ketentuan lisensi MIT. Lihat lisensi.mit untuk teks lengkap.
/3rdparty/pulseaudio-headers berisi bagian dari proyek Pulseaudio dan didistribusikan berdasarkan istilah LGPLV2.1+. Lihat konten file untuk detailnya.