Saya mencoba menyimpan pesan voicemail dari ponsel Verizon Fios dengan kualitas terbaik. Pesan voicemail tersedia online , tetapi hanya untuk bermain (pemutar berbasis Java), tidak ada penyimpanan. Secara resmi, tidak ada cara yang didukung bagaimana cara menyimpan pesan suara digital asli sebagai file dari layanan Fios Digital Voice (tidak ada layanan berbayar, tidak ada apa pun, tidak ada alasan mengapa).
Satu-satunya ide saya adalah merekam data digital dari pemain saat dalam perjalanan ke kartu suara. Saya mencoba konfigurasi Linux ALSA dengan perangkat loop.
# cat /etc/asound.conf
# default device
pcm.!default {
type plug
slave.pcm "loop"
}
# output device
pcm.loopout {
type dmix
ipc_key 328211
slave.pcm "hw:Loopback,0,0"
}
# input device
pcm.loopin {
type dsnoop
ipc_key 686592
slave.pcm "hw:Loopback,1,0"
}
# duplex plug device
pcm.loop {
type plug
slave {
pcm {
type asym
playback.pcm "loopout"
capture.pcm "loopin"
}
}
}
Ini sepertinya berfungsi dan merekam audio, misalnya ketika memainkan sesuatu di Youtube, output audio masuk ke perangkat loop (output audio default) dan saya dapat menangkapnya (tidak yakin bagaimana cara kerjanya, saya menguji 44.1kHz dan 48 Khz. )
arecord -f cd -D loop | aplay -f cd -D hw:0,0
arecord -f dat -D loop | aplay -f dat -D hw:0,0
Tetapi ketika saya mencoba untuk menangkap keluaran audio player Verizon Java, itu kacau dan panjangnya sepertinya tidak cocok. Saya menduga itu mungkin mono pada 8 kHz dan saya mencoba berbagai hal, mengubah frekuensi dan format, tetapi tidak ada yang membantu.
Apakah Anda tahu apa yang salah di sini dan bagaimana cara merekam pesan? Apakah masalah dalam konfigurasi ALSA? Atau mungkin masalah kernel? (Saya menggunakan 3.4.88). Setiap ide akan sangat disambut.
Jawaban:
Pertanyaan yang menarik, dahulu kala saya memikirkan tentang perekaman sederhana audio digital dan video, mungkin melalui beberapa driver audio dan video virtual, tetapi tidak pernah sampai di sana.
Saya menggunakan file konfigurasi Anda dan memiliki masalah yang sama persis seperti yang Anda jelaskan. (Saya menghapus driver kompatibilitas OSS dari ALSA untuk memastikan, menguji kernel yang berbeda - tampaknya tidak masalah, dan menggunakan Debian Wheezy)
semua perintah di atas berfungsi OK untuk speaker
sekarang merekam dari lingkaran dan memutar ke depan
semua mengirim audio ke loop dan memutar ke speaker OK
tapi di sini suara rusak - sangat menyimpang !!! Hanya bermain ke perangkat default. Pemutaran yang ditentukan melalui loop berhasil!
Setelah mencoba berbagai perubahan, saya menguji modifikasi asound.conf ini
Itu memecahkan masalah! Ketika perangkat default adalah loopout, ia berfungsi. Mencoba
arecord -f cd -D loopin | aplay -f cd -D front
tidak berpengaruh apa-apa. Tidak yakin bagaimana loop bekerja tetapi ini mampu menangkap audio. Atau bug di ALSA? Apakah Anda menggunakan Debian? Apakah itu berhasil untuk Anda?Catatan untuk saran lain untuk menyelesaikan masalah:
Untuk membuang aliran jaringan: Saya berasumsi jika aplikasi tidak ingin Anda menyimpan data, transfer akan dienkripsi (https ???). Jika pemain tidak memeriksa sertifikat server, bagaimana cara Anda mengambil data? Apa metode cepat & mudah favorit Anda bagaimana menjadi manusia di tengah dan menangkap arus?
Pulseaudio: Bagaimana cara menjalankannya di Debian Wheezy? Wiki mengatakan itu berfungsi. Itu tidak.
Bagaimana cara saya memecahkan masalah apa yang sedang terjadi? (Alat, diag?)
Jack: Saya tidak menemukan petunjuk sederhana cara menginstal Jack. Sepertinya cukup rumit. Apakah itu menganggap Pulseaudio berjalan? Dokumentasinya membingungkan. Apakah Anda memiliki tautan untuk quickstart yang bagus (cara menginstal dan menguji untuk memastikan itu berfungsi?)
Apakah Anda berasumsi bahwa sebagian besar aplikasi audio (seperti Fios Voicemail Java player) akan dapat diputar ke Pulseaudio atau Jack dan tidak mengirim audio ke ALSA?
sumber
Apakah Anda ingat untuk "modprobe snd-aloop"? Saya sudah mencobanya dan berfungsi untuk saya dengan asound.conf Anda di youtube, pandora, tunein, vonage, dan pemutar java ini . Bisa jadi sesuatu yang spesifik untuk Fios, tapi saya tidak punya Fios untuk diuji. Dapatkah Anda menemukan situs lain yang tersedia untuk umum yang juga menyebabkan masalah?
Juga, coba merekam ke file, lalu memutarnya:
sumber
Ide terbaik
Pertama, membaca pertanyaan Anda, saya tidak akan melakukannya seperti ini. Saya akan mengintip jaringan dan mencoba menangkap aliran. Mungkin di tempat yang cukup dapat diprediksi yang dapat dihapus dengan panggilan sederhana
tshark
. Tapi itu pertanyaan lain.Peningkatan atas ALSA
Meskipun metode Anda adalah pendekatan yang valid, saya tidak akan menggunakan ALSA. ALSA adalah lapisan abstraksi perangkat keras. Saya akan menggunakan daemon suara yang hampir di mana-mana PulseAudio. Itu lebih masuk akal. Buat null-sink.
Perintah itu akan mengembalikan Anda
module id
. Itu tidak ada gunanya bagi kita.Sekarang tinggal atur variabel lingkungan
PULSE_SINK
. (sink_name dalam contoh di atas adalah "MySink")Atau, jalankan program dengan
PULSE_SINK=MySink
dan wastafel nol itu akan menangkap aliran.Setiap kali Anda ingin melakukan streaming ke file, jalankan:
Opus bitrate rendah adalah taruhan terbaik untuk merekam percakapan telepon.
Catatan kaki:
sox
ke aliran untuk itu. Lihatman sox
, carivad
.--downmix-mono
pada aliran stereo. Anda mungkin ingin mencoba mengirimchannels=1
argumenmodule-null-sink
pada langkah pertama. Semua telepon mono.sumber
Setelah menghabiskan lebih dari satu jam dengan sia-sia menyiapkan perangkat loopback ALSA pada Debian, solusi yang paling efektif dan paling tidak memakan waktu adalah menyolder perangkat yang sebenarnya dalam 5 menit.
Serius, saya mengkompilasi ulang kernel untuk mengaktifkan loopback ALSA, saya mengubah /etc/asound.conf dan ~ / .asound.rc tanpa hasil.
sumber
Saya sangat merekomendasikan menggunakan JACK. Itu adalah singkatan rekursif untuk JACK Audio Connection Kit. Ini disesuaikan untuk apa yang Anda lakukan, merutekan audio dari satu perangkat lunak, dalam kasus Anda alat pemutaran Java, ke perangkat lain, perangkat lunak rekaman. Ini sangat bagus untuk perekaman latensi rendah, yang menurut saya dapat membantu Anda mendapatkan kualitas yang Anda cari.
Dengannya Anda dapat dengan mudah merutekan audio dari sumber apa pun di komputer Anda ke berbagai alat rekaman. Bahkan, ada GUI yang sangat bagus untuk itu disebut QjackCtl .
Halaman ini mencakup cara merutekan audio dari browser (Flash dan mungkin alat Java Anda) ke Jack. Bagaimana ini dilakukan tergantung pada sistem Anda.
Sebagai contoh:
Ubah Anda
~/.asoundrc
atau~/asound.conf
:Maka Anda harus dapat menggunakan
sumber
pavucontrol
akan melakukan hal yang sama seperti AndaQjackCtl
, dan Anda selalu bisa bergerakpacmd move-sink-input
.pasuspender -- jackd
. Namun demikian, jika poster tersebut mengalami masalah kualitas, mungkin ada baiknya mencoba sesuatu yang mudah. Juga, QjackCtl membuatnya sangat mudah untuk menyesuaikan pengaturan yang memberikan umpan balik yang terlihat pada latensi dan xruns, yang umumnya merupakan penyebab dari audio yang kacau .