পটভূমি
রাস্পবেরি পাই এর জন্য বিভিন্ন শব্দ সংক্রান্ত সমস্যা সমাধানের চেষ্টা করার জন্য কতটা প্রচেষ্টা করা হয়েছে তা অবাক করে দেওয়া অবাক। স্পষ্টতই রাস্পবিয়ান এর অধীনে ALSA সাফল্যের সাথে বিকাশ করতে এবং ব্যবহার করতে নতুন ব্যবহারকারীদের পক্ষে এটি দুর্বলতম স্থান হতে হবে। আমার নিজের আরপিআই 3 শব্দটি বিভিন্ন ওএস সংস্করণে এবং অন্যান্য লিনাক্স ডিস্ট্রিবিউশনেও কাজ করার চেষ্টা করার জন্য যথেষ্ট সময় এবং প্রচেষ্টা ব্যয় করার পরে, আমি সিদ্ধান্ত নিয়েছি যে সিদ্ধান্তটি টু টু-গো-সলিউশন পৃষ্ঠাটি লিখব। সর্বশেষ উপর একটি বহিস্থিত সাউন্ড কার্ড ব্যবহারের বিষয়ের জন্য কমপক্ষে
Raspbian প্রসারিত করুন ।
ALSA সাউন্ড সিস্টেম
ALSA বলতে বোঝা যায় যে কোনও ধরণের * নিক্স ভিত্তিক ডিভাইসটিকে তার হার্ডওয়্যার কনফিগারেশন নির্বিশেষে এবং হার্ডওয়্যারটি কত পুরানোই নির্বিশেষে সমর্থন করে। অগত্যা, এর 20 বছরের
বিকাশের বিশদটি নিয়ে যাওয়ার চেষ্টা করার খুব কমই দরকার
। আমরা কেবল একটি বর্তমান পরিস্থিতিতে সারাংশ প্রয়োগ করি।
তবে, ইতিহাসের কোনও সময়েই মানবজাতি এএলএসএকে ব্যাখ্যা করার চেষ্টা করার মতো এত পরিমাণে অকেজো এবং অযথা ডায়াগ্রাম তৈরি করতে পারেনি। দূরবর্তী তথ্যযুক্ত কেবলমাত্র এই দুটি:
সিস্টেমের তথ্য প্রাপ্ত
প্রথম ধাপটি কোন শব্দটি, যদি কোনও হয়, কাজ করে এবং আপনার ইতিমধ্যে কোন হার্ডওয়্যার রয়েছে তা নির্ধারণ করা। ডিটালস সন্ধানের জন্য বিভিন্ন ধরণের উপায় রয়েছে তবে গড়পড়তা ব্যক্তির পক্ষে details বিবরণগুলির বেশিরভাগই অর্থহীন। আমরা সবচেয়ে গুরুত্বপূর্ণ প্রদর্শন।
আমাদের (শব্দ) সিস্টেম সম্পর্কে আমরা কী জানতে চাই?
আমরা জানতে চাই:
- অন্তর্নির্মিত শব্দ হার্ডওয়্যার নাম এবং সংস্করণ
- বাহ্যিক শব্দ হার্ডওয়্যার নাম এবং সংস্করণ
- এটি ব্যবহার করে কার্নেল ড্রাইভার (মডিউল)
- অন্যান্য শব্দ সম্পর্কিত কার্নেল ড্রাইভার / মডিউলগুলি লোড হয়েছে
- কি শব্দ কার্ড উপলব্ধ
- কোন ক্রমে সাউন্ড কার্ডগুলি ওএস এবং প্রোগ্রামগুলি দ্বারা ব্যবহৃত এবং নির্বাচন করা হয়
- যদি কোনও বিরোধী হার্ডওয়্যার বা সাউন্ড সিস্টেম প্রোগ্রাম থাকে
আপনি কোথা থেকে আপনার সিস্টেমে শব্দটি প্লে করতে এবং রেকর্ড করতে চান?
শব্দ বাজানোর জন্য আপনার বিকল্পগুলি হতে পারে:
- অভ্যন্তরীণ 3.5 মিমি অডিও হেডফোন জ্যাক থেকে (অ্যানালগ অডিও)
- এইচডিএমআই সংযুক্ত স্ক্রিন / মনিটর থেকে
- একটি বাহ্যিক ইউএসবি সাউন্ড কার্ড থেকে
- একটি জিপিআইও বন্দর থেকে
শব্দ রেকর্ড করার জন্য আপনার বিকল্পগুলি হতে পারে:
- ক। একটি বাহ্যিক ইউএসবি সাউন্ড কার্ড থেকে (কমপক্ষে এক ধরণের ইনপুট সহ)
- খ। কোনও ফাইল বা স্ট্রিম থেকে
- গ। একটি জিপিআইও থেকে
ইন এই পোস্ট, আমরা আপনাকে বলতে কিভাবে হবে খেলা ও বহিস্থিত ইউএসবি সাউন্ড কার্ড ব্যবহার রেকর্ড ।
ভবিষ্যতের প্রমাণ সাফল্যের পরিকল্পনা?
আরপিআই-র আপডেটের সাথে নিয়মিত নতুন পরিবর্তন এবং উন্নতির ধারা বয়ে চলেছে, প্রায়শই পুরানো সমাধানগুলি ভঙ্গ করে। এখানে ধারণাটি হ'ল, সিস্টেমে যতটা সম্ভব পরিবর্তন করা বা প্রয়োজনে এগুলি স্পষ্ট করা। এর অর্থ, আমরা সিস্টেম-বিস্তৃতের চেয়ে বাই-ইউজার কনফিগারেশন ব্যবহার করতে পছন্দ করি। উদাহরণস্বরূপ, রুট মালিকানার সিস্টেম ফাইলগুলির পরিবর্তে আপনার হোম ডিরেক্টরিতে কনফিগারেশন ফাইলগুলি ব্যবহার করার চেষ্টা করুন।
টিএল; ডিআর (চলুন ইতিমধ্যে চলুন!)
আপনার বাহ্যিক ইউএসবি সাউন্ড-কার্ডটি পুনরায় বুট করুন এবং প্লাগইন করুন, তাই আমরা একই পৃষ্ঠায় শুরু করি ...
উ: কিছু তথ্য সংগ্রহ করুন
# Check ALSA modules
cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
# Check sound hardware
cat /proc/asound/cards
0 [ALSA ]: bcm2835 - bcm2835 ALSA
bcm2835 ALSA
1 [Set ]: USB-Audio - C-Media USB Headphone Set
C-Media USB Headphone Set at usb-3f980000.usb-1.5, full speed
# Check info on card-1
amixer -c 1
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 151
Mono:
Front Left: Playback 104 [69%] [-8.88dB] [on]
Front Right: Playback 104 [69%] [-8.88dB] [on]
Simple mixer control 'Mic',0
Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
Playback channels: Mono
Capture channels: Mono
Limits: Playback 0 - 32 Capture 0 - 16
Mono: Playback 23 [72%] [34.36dB] [off] Capture 0 [0%] [0.00dB] [on]
Simple mixer control 'Auto Gain Control',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
এখানে আমরা দেখতে পাই যে সিস্টেম ডিফল্ট ( card 0
) বিসিএম 2835 এএলএসএ মডিউলটি ব্যবহার করছে। যদিও আমরা সাধারণত কোন কার্ডটি ব্যবহার করতে হবে তা নির্দিষ্ট করতে পারি,
তবে ওমেক্সপ্লেয়ারের মতো কিছু সফ্টওয়্যারটির এই বিকল্প নেই এবং বিভিন্ন উপায়ে কোনও শব্দ উত্পাদন করতে ব্যর্থ হবে।
এই মুহুর্তে আপনি ইতিমধ্যে আপনার ALSA কনফিগারেশন ফাইলগুলি কনফিগার করার চেষ্টা করতে পারেন। কিছু সফল হয়, আবার অনেকেই না কারণ এটি কীভাবে এবং কোথায় করা উচিত তা স্পষ্ট নয়। আমরা শেষ পর্যন্ত যা চাই তা হ'ল আমাদের বাহ্যিক ইউএসবি সাউন্ড কার্ডটি ব্যবহার করতে আমাদের সিস্টেমকে বলা।
বি। অডিও ব্লাট সরান
আপনার পালস অডিও (পিএ) বা
অতিরিক্ত জ্যাক সার্ভার সফ্টওয়্যার রাখার খুব ভাল কারণ না থাকলে আপনার যদি সেগুলি থাকে তবে তাদের আনইনস্টল করা উচিত । তারা ALSA এর সাথে হস্তক্ষেপের ঝোঁক রাখে, কারণ তারা অনেকগুলি ALSA ফাংশন নিয়ন্ত্রণ করে এবং সেইগুলি দ্বারা প্রয়োজনীয় সমস্ত অতিরিক্ত কনফিগারেশনগুলি জিনিসগুলিকে অবিশ্বাস্যভাবে বিভ্রান্ত করে তোলে!
sudo apt-get remove pulseaudio
# You can keep `jack*`, but make sure it is not running.
# If it is running you need to stop it, disble it or remove it.
service --status-all
# Disable the running service with:
sudo systemctl disable xxxxx
সি। অভ্যন্তরীণ (ব্রডকম) সাউন্ড কার্ডটি অক্ষম করুন
অভ্যন্তরীণ সাউন্ডকার্ডটি কার্নেল মডিউলটির দ্বারা চালিত:
/lib/modules/4.9.59-v7+/kernel/sound/arm/snd-bcm2835.ko
আপনি অডিও জ্যাক (1) বা HDMI (2-এ) ব্যবহার করার পরিকল্পনা না করে আপনার এই কার্নেল মডিউলটি অক্ষম করা উচিত। এটি করার জন্য দুটি পদ্ধতি রয়েছে।
- এটি একটি বুট কনফিগার পতাকা সহ অক্ষম করুন
- এটি
modprobe.d
ডিমন দ্বারা কার্নেলের মধ্যে লোড হওয়া থেকে বিরত রাখুন
আমাদের নমনীয় পদ্ধতির সাথে থাকার চেষ্টা করে আমরা (1) বেছে নিই।
# Edit boot config with:
sudo nano /boot/config.txt
# so that:
cat /boot/config.txt
...
# Enable audio (loads snd_bcm2835)
#dtparam=audio=on
dtparam=audio=off
...
# You need to reboot!
sudo reboot now
যদি কোনও কারণে আপনি পদ্ধতি (2) ব্যবহার করতে পছন্দ করেন তবে আপনাকে কার্নেল মডিউলটি ব্ল্যাকলিস্ট করতে হবে। এটি করার জন্য, আপনি কেবল শব্দটি প্রবেশ করুন blacklist
, এর পরে কোনও *.conf
ফাইলের মডিউলের নাম /etc/modprobe.d/
। তবে, raspi-blacklist.conf
এই উদ্দেশ্যে ইতিমধ্যে সেখানে একটি খালি, সংরক্ষিত ফাইল রয়েছে called যাইহোক, 6 মাস পরে, আপনি এই সম্পর্কে ভুলে যাবেন এবং এতে কী রয়েছে তাই আপনি যে মডিউলটিকে কালো তালিকাভুক্ত করছেন তার নামকরণ করা ভাল।
cd /etc/modprobe.d/
# Manually edit a new file: blacklist-snd_bcm2835.conf
#sudo nano blacklist-snd_bcm2835.conf
# And add the line: blacklist snd_bcm2835
## OR directly with:
sudo tee /etc/modprobe.d/blacklist-snd_bcm2835.conf <<EOF
blacklist snd_bcm2835
EOF
# You need to reboot!
sudo reboot now
পার্থক্য কি? কোনটিই, এএএএফসিটি
পুনরায় বুট করার পরে, আপনার শব্দ মডিউলগুলি পুনরায় পরীক্ষা করুন।
$ cat /proc/asound/modules
1 snd_usb_audio
$ cat /proc/asound/cards
1 [Set ]: USB-Audio - C-Media USB Headphone Set
C-Media USB Headphone Set at usb-3f980000.usb-1.5, full speed
বম! আপনার বিরক্তিকর বিসিএম 2835 ( card 0
) চলে গেছে, তবে ইউএসবি কার্ডের সূচকটি একই! এটি আসলে ভাল।
আপনার ALSA কনফিগার করুন
আমি ইতিমধ্যে উল্লিখিত হিসাবে, আমরা ALSA ডিফল্ট হিসাবে আমাদের নিজস্ব ইউএসবি সাউন্ড কার্ড ব্যবহার করতে চান। এর অর্থ এটিও হ'ল আমরা চাই যে এটি কার্নেল সাউন্ড মডিউলগুলির তালিকার প্রথম উপলব্ধ সূচক হোক। যেহেতু উপরে মডিউলটি সরানো হয়েছে এবং সূচকটি একই (কার্ড 1), তাই আমরা ভাল। তবে আমাদের আবারও বিসিএম 2835 লোড করার প্রয়োজন হলে আমরা নই, কারণ সেই মডিউলটি প্রথমটি ( card 0
) হিসাবে আবার প্রদর্শিত হবে ।
আমাদের ডিফল্ট পিসিএম কার্ড সূচীটি কী হওয়া উচিত এবং কোন ক্রমে তাদের কার্নেলের মধ্যে অগ্রাধিকার দেওয়া উচিত তা কেবল আমাদের ALSA কে জানাতে
হবে।
3 টি জায়গা রয়েছে যেখানে আপনি আপনার ALSA কনফিগার করতে পারেন।
- এতে ব্যবহারকারী কনফিগার করুন :
~/.asoundrc
- সিস্টেম কনফিগ মধ্যে:
/usr/share/alsa/alsa.conf
- সিস্টেম মডিউল সার্ভার মধ্যে:
/lib/modprobe.d/aliases.conf
প্রথম 2 ডিফল্ট ডিভাইসগুলি পরিবর্তন করে, যেখানে সর্বশেষটি উপস্থিতির ক্রম নিশ্চিত করে।
আমরা প্রথমে আমাদের ব্যবহারকারীর নির্দিষ্ট কনফিগারটি ঠিক করতে পারি card 1
। যদি আপনার একাধিক কার্ড দেখানো থাকে তবে আপনি ডিফল্ট হতে চান এমন একটির সূচকটি নির্বাচন করুন।
#cat ~/.asoundrc
cat << EOF | tee ~/.asoundrc
pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}
EOF
এরপরে, আমরা উপরের মত একই কার্ড সূচক নম্বরগুলি ব্যবহার করে সিস্টেম কনফিগারেশনটি ঠিক করি। আমাদের এটি করা দরকার, কারণ কিছু সিস্টেম প্যাকেজগুলি আপনার ব্যবহারকারীর কনফিগারেশন ফাইলটি কখনই দেখতে পাবে না।
sudo nano /usr/share/alsa/alsa.conf
# then replace:
#defaults.ctl.card 0
#defaults.pcm.card 0
# with:
defaults.ctl.card 1
defaults.pcm.card 1
পরিবর্তনগুলি কার্যকর হওয়ার জন্য পুনরায় বুট করুন।
আপনার এখন একটি কার্যকর অডিও সিস্টেম থাকা উচিত।
আসুন এটি পরীক্ষা!
সঠিক পরীক্ষা করার জন্য, পরীক্ষা করার জন্য আপনার যথাযথ ফাইলগুলির প্রয়োজন। যে কোনও কিছুর আগে নিশ্চিত হয়ে নিন যে আপনার সমস্ত শব্দ এবং ভিডিও ফাইলগুলি আসলে কাজ করছে।
(আমি অডিও চালানোর জন্য কিছু এইচ 264 / এমপি 4 পরীক্ষার ভিডিও পাওয়ার চেষ্টা করার জন্য যথেষ্ট সময় ব্যয় করেছি, কেবল পরে তা আবিষ্কার করতে পারি যে এটির কোনও অডিও এনকোড করা হয়নি! ডু!)
সতর্কতা আপনি যদি ভিডিওগুলি MPEG-2
বা VC-1
কোডেকগুলি ব্যবহার করে যাচাই করার চেষ্টা করছেন , তবে আপনাকে
বিল্ট-ইন হার্ডওয়্যার ডিকোডারগুলির সাথে এটি সম্পূর্ণরূপে ডিকোড করতে সক্ষম হতে আরপিআই সংস্থার একটি কোডেক কী কিনতে হবে। অন্যথায়, আপনাকে প্রথমে ফাইলগুলি রূপান্তর করতে হবে।
আপনার কোডেক এর সাথে সক্ষম হয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন:
# Check with:
vcgencmd codec_enabled MPG2
vcgencmd codec_enabled WVC1
পরীক্ষা করার জন্য আপনার কিছু যাচাই করা ফাইলের প্রয়োজন হবে। আপনার যদি কিছু না থাকে তবে আপনি এগুলি ডাউনলোড এবং ব্যবহার করতে পারেন।
# get some demo sound and video files
cd ~/Music
wget -Lk http://rpf.io/lamp3 -O example_11k.mp3
wget -Lk http://www.kozco.com/tech/piano2-CoolEdit.mp3 -O pianoTest_48k.mp3
wget -Lk http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_2mb.mp4 -O bbb_720p_2mb.mp4
wget -Lk https://raw.githubusercontent.com/mediaelement/mediaelement-files/master/big_buck_bunny.mp4 -O bbb_360_22k.mp4
এরপরে, খেলি !!
# Double-check!
aplay -l && arecord -l
**** List of PLAYBACK Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
**** List of CAPTURE Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
# Play white noise on 2-channels (L/R) on Card-1
speaker-test -c2 -D hw:1,0
# Play a WAV sound file
speaker-test -c2 -D hw:1,0 --test=wav -w /usr/share/sounds/alsa/Front_Center.wav
# Once the correct default card+device is set, and after reboot,
# then full left/right voice test (above) is performed, just by:
speaker-test -c2 -twav
# Record some sounds (with a VU bar):
arecord --device=hw:1,0 --format S16_LE --rate 44100 -c1 -V mono test.wav
# Play recorded sounds
aplay -D plughw:1,0 test.wav
# Play recorded sounds (sample rate have to be equal)
speaker-test -c2 -D plughw:1,0 -r 44100 --test=wav -W $HOME -w test.wav
# Install an MP3 player
sudo apt-get install mpg123
# Play some MP3 file
mpg123 -v -r 44100 some.mp3
# Play an MP3 sound stream
mpg123 http://ice1.somafm.com/u80s-128-mp3
# This plays video, but no sound!
omxplayer -o alsa /opt/vc/src/hello_pi/hello_video/test.h264
# This plays video and sound!
omxplayer -o alsa bbb_720p_2mb.mp4
# The following plays sometimes (!?) and at the wrong speed!
omxplayer -o alsa some.mp3
তুমি যেতে পারো!
[alচ্ছিক] অতিরিক্ত অডিও হার্ডওয়ারের অর্ডার
দ্রষ্টব্য আপনি যদি এই বিভাগটি ব্যবহার করেন তবে আপনাকে উপরের বিভাগগুলিতে সমস্ত কার্ড সূচকের মান পরিবর্তন করতে হবে!
যদি আপনি অতিরিক্ত অডিও হার্ডওয়্যার সংযুক্ত করে থাকেন এবং এটি আপনার চান হিসাবে প্রদর্শিত না হয়, আপনি /lib/modprobe.d/aliases.conf
ফাইলটিতে মডিউলগুলির ক্রমটি পুনরায় ব্যবস্থা করতে বাধ্য করতে পারেন ।
কিছু সমাধান এই ফাইলটিতে পরিবর্তন আনার প্রস্তাব দিয়েছে। দুর্ভাগ্যক্রমে, তারা জানে না যে RPI ডিফল্ট ইউএসবি সাউন্ড মডিউলটি ভুল বানানযুক্ত! সুতরাং পরিবর্তনগুলি কখনই কার্যকর হয় না। সাউন্ড কার্নেল মডিউলটি আমরা যার সাথে সম্পর্কিত, তাকে বলা হয় snd_usb_audio
এবং না snd-usb-audio
। ফাইলের নাম হয় snd-usb-audio.ko
এবং অবস্থিত: /lib/modules/4.9.59-v7+/kernel/sound/usb/
।
যথেষ্ট মজাদার, ফাইলটির পাঠ্যটি বলছে এটির সংশোধন করার দরকার নেই!
sudo nano /lib/modprobe.d/aliases.conf
#--------------------------------------
# For original (out-of-box) use
#--------------------------------------
# replace this:
options snd-usb-audio index=-2
# with this:
options snd_usb_audio index=-2
#--------------------------------------
# To change the index & order
#--------------------------------------
# Set the index value of the cards:
options snd_usb_audio index=0
options snd_bcm2835 index=1
# Set the order:
options snd slots=snd_usb_audio,snd_bcm2835
তথ্যসূত্র:
aplay
ধারাবাহিকভাবে এই সমস্ত কাজের পরে কিছুই করা হয়নি, যতক্ষণ না আমি-D plughw:0,0
পরিবর্তে ব্যবহার করেছি-D hw:0,0
(shttps: //raspberrypi.stackexchange.com/a/89162 এর উপর ভিত্তি করে)। দুর্ভাগ্যক্রমে, প্রায় সব কিছু এখন ইউএসবি-তে অডিও চালাতে পারে, তবে যে ইউটিলিটিটি আমাকে বেশিরভাগ ক্ষেত্রে কাজ করা প্রয়োজন (vban_receptor
এখনও) তা কাজ করে না, তবে এই মুহুর্তে এটি এখন আর সেটআপের দোষ নয়