পালস অডিও সাথে একটি প্রোগ্রামের আউটপুট রেকর্ড করুন


49

আমি কমান্ড লাইন / ব্যাশ স্ক্রিপ্ট ব্যবহার করে পালস অডিও সহ একটি প্রোগ্রামের আউটপুট রেকর্ড করতে চাই । সমস্ত আউটপুট রেকর্ড না করা গুরুত্বপূর্ণ, তবে কেবলমাত্র একটি নির্দিষ্ট প্রোগ্রাম থেকে আউটপুট।

আমি ভেবেছিলাম আমাকে একটি নতুন নাল-সিঙ্ক তৈরি করতে হবে এবং প্রোগ্রামটির আউটপুটটিকে এই নতুন সিঙ্কে স্থানান্তরিত করার চেয়ে। প্যারাককে রেকর্ড করার জন্য এই নির্দিষ্ট মনিটরটি ব্যবহার করতে বলুন ।

প্রথম পদক্ষেপটি এরকম কিছু হবে:

pactl load-module module-null-sink sink_name=steam

কিন্তু কীভাবে প্রোগ্রামটির আউটপুটটি এখন এই ডুবে যাবে?
এবং কীভাবে বাশ স্ক্রিপ্টের সাথে নির্দিষ্ট সিঙ্কটি রেকর্ড করবেন?

উত্তর:


52

এরকম কিছু চেষ্টা করুন:

একটি টার্মিনালে প্রবেশ করুন

pacmd

(এটি পালস অডিও-সার্ভারের সিএলআই) তারপরে ব্যবহার করুন

list-sink-inputs

(যেখানে আপনি চলমান ইনপুটগুলির সূচকগুলি পান) এখন আপনার ইনপুটটির সূচকটি সন্ধান করুন। এখন $ INDEX হিসাবে উল্লেখ করা হয়

লিপিযোগ্য অংশটি হ'ল:

pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o steam.ogg --raw -

ব্যাখ্যা:

  • প্রথম কমান্ডটি নাল-সিঙ্ক যুক্ত করবে যেমনটি আপনি ইতিমধ্যে জানতেন।
  • দ্বিতীয় কমান্ডটি আপনার স্ট্যান্ডার্ড-অডিও-সিঙ্ক থেকে সিঙ্ক-ইনপুটটিকে বাষ্পে নিয়ে যায়
  • তৃতীয় কমান্ডটি ডিভাইস স্টিম (-d) এর মনিটরের রেকর্ড করে এবং আউটপুট (কাঁচা-তরঙ্গ-প্রবাহ )কে ওগেন্সিতে রাখে, যা এই তরঙ্গ প্রবাহকে একটি ওগা-ফাইলে এনকোড করে। (এমপি 3 ব্যবহারের খোঁড়া জন্য)

উজ্জ্বল, এই দুর্দান্ত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ! :)
ফোর্স

2
আপনি কীভাবে এই অপারেশনটিকে পূর্বাবস্থায় ফিরিয়ে আনবেন তা দয়া করে ব্যাখ্যা করতে পারেন? আমার নাল ডুবানো এখনও বিভিন্ন অ্যাপ্লিকেশন ম্যাপ করা হয়, এবং এখন আমার কোন শব্দ নেই!
ixtmixilix

@ixtmixilix: সমস্ত সেটিংস ডিফল্টে পুনরুদ্ধার করার সহজতম উপায় হ'ল পালসওডিও সার্ভারটি মেরে ফেলা এবং পুনরায় চালু করা। যদি অটোস্পানে সেট করা থাকে (এটি ডিফল্ট) আপনি কেবল pulseaudio -kএকটি টার্মিনালে ইস্যু করেন।
তাক্কাত

1
@ixtmixilix আপনি চালানোর list-sink-inputsসময় sinkমানটি নোট করুন । অদলবদল করতে কেবল রান করুন pactl move-sink-input $INDEX $SINK। এর মতো কিছুpactl move-sink-input 4719 1
সায়রান

27

এই থ্রেডের ওয়াচটল উত্তরটি উন্নত করা হচ্ছে যাতে আপনি অ্যাপ্লিকেশনটির শব্দটিকে দুটি তালিকা এবং রেকর্ড করতে পারেন :

প্রথমত, আমরা আমাদের ডিফল্ট আউটপুটটি সন্ধান করি এবং এর সিঙ্কের নামটি এতে রেখেছি $DEFAULT_OUTPUT:

$ pacmd list-sinks | grep -A1 "* index"
  * index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
$ DEFAULT_OUTPUT=$(pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+")
$ echo $DEFAULT_OUTPUT
alsa_output.pci-0000_00_1b.0.analog-stereo

তারপরে, আমরা একটি সংযুক্ত সিঙ্ক তৈরি করি যার কেবলমাত্র একটি ক্রীতদাস রয়েছে: $ DEFAULT_OUTPUT । অ্যাপ্লিকেশন (উত্স) দ্বারা উত্পন্ন শব্দটি দাস সিঙ্কে (অর্থাৎ আসল আউটপুট) ফরোয়ার্ড করা হবে এবং আমরা এটি রেকর্ডও করব। এটি নাল সিঙ্কের চেয়ে আলাদা যেখানে উত্সের শব্দটি এগিয়ে দেওয়া হয় না।

$ pactl load-module module-combine-sink \
  sink_name=record-n-play slaves=$DEFAULT_OUTPUT \
  sink_properties=device.description="Record-and-Play"

sink_properties alচ্ছিক এবং আপনি বাগের বর্ণনায় শূন্যস্থান ব্যবহার করলে বাগটি হতে পারে।

তারপরে, আমরা ওয়াচটল উত্তরেরpactl move-sink-input ... কমান্ডটি ব্যবহার করতে পারি ( বাষ্পের পরিবর্তে রেকর্ড-এন-প্লে সহ ) তবে জিইউআই আরও সহজ (এবং চেকিং / সমস্যা সমাধানের জন্য দুর্দান্ত):pavucontrol

$ sudo apt-get install pavucontrol
$ pavucontrol &

তারপরে, আমরা যে অ্যাপটি রেকর্ড করতে চাই তাতে আমরা কিছু শব্দ খেলি। ইন pavucontrol Playbackট্যাব, আমরা অ্যাপ্লিকেশন ড্রপডাউন তালিকায় নির্বাচন করুন: "নথি ভুক্ত-এবং-প্লে '

শেষ পর্যন্ত, আমরা একই সাথে রেকর্ড করা এবং শুনতে ভাল! ( খোঁড়া এমপি 3 উদাহরণ, অগ্রভাগে চালানো)

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3"

অথবা আমরা পটভূমিতে রেকর্ড করতে এবং যে কোনও সময় থামাতে পারি:

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3" \
   > /dev/null &1>/dev/null
$ killall -q parec lame

বিশেষ দ্রষ্টব্য:

  • সবকিছু আনমাস করতে বা পদ্ধতিটি আবার চেষ্টা করার জন্য: এই উত্তরটি ব্যবহার করে ডুবগুলি মুছুন বা পুনরায় সেট করুন । pulseaudio -kসেশনের ডিফল্টগুলিতে সবকিছু পুনরায় সেট করতে দুর্দান্ত কাজ করে।
  • যদি আমরা সিস্টেম সাউন্ড সেটিংসে ডিফল্ট আউটপুট পরিবর্তন করি তবে কাস্টম অ্যাপ্লিকেশন প্লেব্যাক সেটিংটি ওভাররাইট হয়ে যাবে এবং এটিকে আবার সংযুক্ত ইন্টারফেসে সেট করতে আমাদের প্যাভুকন্ট্রলে ফিরে যেতে হবে।
  • বেশ কয়েকটি "আসল" ইন্টারফেস (যেমন হেডফোন, এইচডিএমআই আউটপুট, ইত্যাদি ...) থেকে শব্দ শুনতে সক্ষম হতে আমাদের রেকর্ড-এন-প্লে স্লিনক ক্রীতদাস হিসাবে শুনতে পারা যেতে পারে এমন সমস্ত "আসল" আউটপুট অন্তর্ভুক্ত করা উচিত মত: pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2

সম্পাদনা: সাবধান, উবুন্টু 18 (যেহেতু 17ও) এর পর থেকে, সম্মিলিত সিঙ্কটি আসল আউটপুট ডিভাইসের পরিবর্তে ডিফল্ট সিস্টেম আউটপুট ডিভাইসে পরিণত হয়। সুতরাং যখন আপনি সিস্টেম ট্রেতে সাউন্ড আইকন ব্যবহার করে ভলিউম পরিবর্তন করেন এটি আপনার রেকর্ড সাউন্ডকে প্রভাবিত করে। কার্যতালিকা: সংযুক্ত সিঙ্ক তৈরির পরে, pavucontrolআউটপুট ট্যাবে খুলুন। "দেখুন: ভার্চুয়াল আউটপুট ডিভাইস" নির্বাচন করুন এবং সম্মিলিত সিঙ্কের শব্দ ভলিউমটি 100% এ পুনরায় সেট করুন। তারপরে "দেখুন: হার্ডওয়্যার আউটপুট ডিভাইস" নির্বাচন করুন এবং আসল আউটপুট ডিভাইসে সবুজ আইকন "বিকল্প হিসাবে সংজ্ঞায়িত করুন" টিপুন।


9

@ ওয়াশটেলের উত্তর চমত্কার। @ixtmixilix রেকর্ডিং শেষ হওয়ার পরে নিয়মিত অডিও পুনরুদ্ধার সম্পর্কে জিজ্ঞাসা করেছিল। আমি জানি সবচেয়ে সহজ উপায় এখানে:

pavucontrolজিইউআই ইনস্টল করে চালান । আপনার অডিও-আউটপুটিং অ্যাপ্লিকেশনটি দেখতে হবে এবং এটির Playbackট্যাবের নীচে এটির ভলিউম মিটার । এর পাশে একটি বোতাম থাকবে যা দেখায় যে এটি নাল আউটপুটটিতে চলছে । এটিতে ক্লিক করুন এবং এটি আপনার সাধারণ অডিও আউটপুট, আমার ক্ষেত্রে অন্তর্নির্মিত অডিও অ্যানালগ স্টেরিওতে পরিবর্তন করুন

আপনি যা খুঁজছেন তার একটি স্ক্রিনশট এখানে:

স্ক্রিনশট

আপনি load-moduleসিঙ্ক তৈরি করতে @ ওয়াচটল এর উত্তরটিতে কমান্ডটি চালানোর পরে, ভবিষ্যতে আপনার রেকর্ডিং সেট আপ করতে আপনি এই পদ্ধতির ব্যবহার করতে পারেন ।


যদি আপনি পারেন তবে ইমগুরে একটি স্ক্রিন-শট আপলোড করুন এবং এটি আপনার উত্তরে লিঙ্ক করুন।
লুসিও

এটি সম্ভব হয়েছে কিনা তা আমি জানি না, তবে আমার মনে হয় নাল আউটপুট মডিউলটি আনড করা সবচেয়ে ভাল উপায়, যাতে নতুন প্লেব্যাকগুলি এটি ডিফল্টরূপে গ্রহণ না করে
জ্যাক

6

উন্নতি KrisWebDev এর উত্তর উপরন্তু, যদি আপনি, রেকর্ড-এন প্লে সবসময় পাওয়া হতে চান প্রথম ডিফল্ট আউটপুট জানতে:

pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+"

যা এরকম কিছু আউটপুট দেয়:

alsa_output.pci-0000_00_1b.0.analog-stereo

এর পরে, একটি ফাইল তৈরি করুন ~/.config/pulse/default.pa:

.include /etc/pulse/default.pa

load-module module-combine-sink sink_name=record-n-play slaves=alsa_output.pci-0000_00_1b.0.analog-stereo sink_properties=device.description="Record-and-Play"

কমান্ড alsa_output.pci-0000_00_1b.0.analog-stereoথেকে আপনি যা পেয়েছেন তার সাথে প্রতিস্থাপন করুন replace pacmdকাস্টম কনফিগার ফাইল উপস্থিত থাকলে পালস ডিফল্ট কনফিগারেশন ফাইলটি পড়েন না - এজন্য উপরের প্রথম লাইনে ডিফল্ট কনফিগারেশন ফাইল অন্তর্ভুক্ত রয়েছে। এইভাবে পলসৌদিও প্রথমে ডিফল্ট কনফিগারেশন লোড করে।

pulseaudio -kবর্তমান পালসওডিয়ো দৃষ্টান্তটি হত্যা করতে চালান যাতে নতুন কনফিগারেশন দিয়ে একটি নতুন শুরু হয়।

যে কোন সময়ে আপনি এখানে পরিবর্তন পূর্বাবস্থা করতে চান তাহলে, শুধু অপসারণ ~/.config/pulse/default.paফাইল এবং চালানোর pulseaudio -k

আপনি যদি সমস্ত আউটপুটগুলির জন্য রেকর্ড-এন-প্লেটিকে ডিফল্ট সিঙ্ক হিসাবে দেখতে চান তবে আপনি এর শেষে আরও একটি লাইন যুক্ত করে এটি করতে পারেন ~/.config/pulse/default.pa:

set-default-sink record-n-play

যে প্রোগ্রামগুলির জন্য পলসৌদিও ইতিমধ্যে তথ্য সঞ্চিত করেছে সেগুলি তারা শেষের যে কোনও আউটপুট ডিভাইস ব্যবহার করেছিল তা মনে রাখে, সুতরাং ক্রিসউইডদেবের উত্তরে বর্ণিত একটি পদ্ধতি ব্যবহার করে ম্যানুয়ালি আপনাকে পুনরায় কনফিগার করতে হবে।


2

আমি এই ওয়াশ স্ক্রিপ্টটি @ ওয়াশটল এবং @ ক্রিস ওয়েবেডেভ উত্তর দ্বারা প্রদত্ত উত্তরের ভিত্তিতে তৈরি করেছি।

এখানে উপলভ্য: https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007

কিভাবে ব্যবহার করে?

$ ./pulse-recorder.bash 
    index: 225
                application.name = "ALSA plug-in [mplayer]"
                module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in [mplayer]"
Choose recording index: 225
temp.mp3 file already exist, replace (y/n)? y

নতুন সংস্করণ

আমি একটি পাইথন স্ক্রিপ্ট তৈরি করেছি যা পুরানোটির তুলনায় কিছু উন্নতি করে। https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0

কিভাবে ব্যবহার করে?

$ ./pulse-recorder.py 

1 - ALSA plug-in [mplayer]
2 - AudioIPC Server

Please enter a number: 1

Your selection was: ALSA plug-in [mplayer]
Please press enter when you are ready to start

আপনি যখন এন্টার টিপুন তখনই রেকর্ডিং শুরু হবে। যদি আপনি প্রবেশের সময়টির মধ্যে অ্যাপ্লিকেশনটি ইতিমধ্যে বন্ধ হয়ে যায় (উদাহরণস্বরূপ আপনি এমপ্লেয়ার বন্ধ করেছেন) অ্যাপ্লিকেশনটি আবার উপস্থিত না হওয়া পর্যন্ত স্ক্রিপ্টটি অপেক্ষা করবে এবং রেকর্ডিং শুরু করবে।

সেই স্ক্রিপ্টটিতে ফিরে আসার একমাত্র টান (বনাম মূল এক) হ'ল তালিকায় যদি একই নামের দুটি প্রবেশ থাকে তবে স্ক্রিপ্টটি সঠিকভাবে আচরণ করবে না। উদাহরণ স্বরূপ

$ ./pulse-recorder.py                                                                                                      

1 - ALSA plug-in [mplayer]
2 - ALSA plug-in [mplayer]

আপনার একাধিক আউটপুট রয়েছে (যেমন স্পিকার, বেশ কয়েকটি হেডসেটস, মনিটরের অডিও), আপনি 21 লাইনটিতে উদাহরণস্বরূপ প্রতিস্থাপন করতে পারেন: ডিফল্ট_আউটপুট = alsa_output.pci-0000_00_1b.0.anolog-stereo যেখানে এটি প্যাকএমডি তালিকার আউটপুট থেকে এসেছে -সিন্সস
স্মুডেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.