چرا گنو/لینوکس رو دوست دارم: ضبط صدای در حال پخش

یپش اومده بخواین صدایی که داره از کامپیوترتون پخش می شه رو ضبط کنین؟ مثلا حین یک بازی بخواین صدای بازی رو ضبط کنین یا بخواین آهنگی که توی یک صفحه وب در حال پخشه رو نگه دارین؟ من الان دلم خواست و لینوکس دارم پس:

  1. چون معماری سیستم درست و لایه به لایه است حتما امکان عملی این کار هست
  2. چون سیستم آزاد و بازه حتما یکی برنامه ای نوشته که اینکار رو می کنه
  3. چون سیستم با جامعه زنده است حتما کسی قبلا اینو نوشته که توش چیکار باید کرد
  4. چون ابزارها بازن حتا من توان این رو دارم که بنا به نیاز خودم تنظیمش کنم

و هر چهار مورد واقعیت داره.

منم مثل خیلی از دوستان برای سیستم صدا از PulseAudio استفاده می کنم پس با زدن

pacmd list | grep ".monitor"

می بینم کدوم دستگاه داره صدا پخش می کنه. مثلا در می یاد:

jadi@jell:/tmp$ pacmd list | grep ".monitor"
	monitor source: 0
	name: 
	monitor_of: 0
		device.class = "monitor"
		alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#0: Monitor of Built-in Audio Analog Stereo

نشون میده که من باید به این دیوایش گوش بدم. دستور اینکه بگیم «اطلاعاتی که از فلان پالس آدیو پخش می شه رو نشون بده» دستور pacat است (قشنگیش رو دیدین؟ (: )) و در نتیجه دادن خروجی به sox باعث می شه بتونم خروجی رو به فرمت صوتی‌ای که دوست دارم تبدیل کنم:

pacat --record -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -r 44100 -s -L -b 16 -c 2 - "output.wav"

و به همین سادگی هر چیزی که از بلندگوی کامپیوتر در حال پخشه رو دقیقا با کیفیتی که به بلندگو می رسه در لایه پالس آدیو ذخیره کنم.