Advanced Linux Sound Architecture (ไทย)

From ArchWiki
Revision as of 14:52, 24 June 2013 by Fengchao (Talk | contribs) (Remove how to category.)

Jump to: navigation, search

เอกสารเรื่องนี้จะแนะนำท่านในการติดตั้งโปรแกรม Alsa ซึ่งเป็นระบบการจัดการเสียง กับ Kernel เวอร์ชัน 2.6 ท่านอาจจะอยากศึกษา วิธีการทำให้หลายๆ โปรแกรมส่งเสียงพร้อมกัน

การติดตั้ง

Kernel drivers

Alsa ได้ถูกรวมมาใน Kernel เวอร์ชัน 2.6 และได้ถูกรวมมาใน Kernel ของ Arch ที่ขึ้นต้นด้วย kernel26 หากคุณกำลังสร้าง kernel ของคุณเอง อย่าลืมเพิ่มความสามารถ alsa มาด้วย

Module ที่สำคัญๆ ควรจะถูกตรวจพบและติดตั้งโดยอัตโนมัติโดย udev คุณไม่ควรที่จะต้องตั้งค่าอะไรเพิ่มเติมอีก นอกจากคุณกำลังใช้การ์ด ISA โปรดอย่าเรียกใช้ alsaconf ถ้าคุณกำลังใช้การ์ดเสียงชนิด PCI หรือ ISAPNP เนื่องจาก alsaconf อาจจะทำให้ระบบการตรวจสอบของ udev มีปัญหาได้

โปรแกรมส่วนของผู้ใช้

  • โปรแกรมที่ต้องติดตั้ง
# pacman -S alsa-lib alsa-utils
  • โปรแกรมที่ควรติดตั้ง หากต้องการใช้โปรแกรมที่ต้องการความสารถของ OSS และ dmix
# pacman -S alsa-oss

โปรแกรมที่เกี่ยวข้องกับ Alsa น่าจะบังคับให้คุณลง alsa-lib ด้วย

การตั้งค่า

การตรวจสอบว่า Module ระบบเสียงได้ถูกเรียกใช้งานแล้ว

คุณสามารถปล่อยให้ udev ตรวจสอบระบบเสียงของคุณให้อัตโนมัติ พร้อมทั้งตรวจสอบความเข้ากันได้กับ OSS หากต้องการตรวจสอบ ก็ใช้คำสั่งดังนี้

$ lsmod|grep '^snd'
snd_usb_audio          69696  0 
snd_usb_lib            13504  1 snd_usb_audio
snd_rawmidi            20064  1 snd_usb_lib
snd_hwdep               7044  1 snd_usb_audio
snd_seq_oss            29412  0 
snd_seq_midi_event      6080  1 snd_seq_oss
snd_seq                46220  4 snd_seq_oss,snd_seq_midi_event
snd_seq_device          6796  3 snd_rawmidi,snd_seq_oss,snd_seq
snd_pcm_oss            45216  0 
snd_mixer_oss          15232  1 snd_pcm_oss
snd_intel8x0           27932  0 
snd_ac97_codec         87648  1 snd_intel8x0
snd_ac97_bus            1792  1 snd_ac97_codec
snd_pcm                76296  4 snd_usb_audio,snd_pcm_oss,snd_intel8x0,snd_ac97_codec
snd_timer              19780  2 snd_seq,snd_pcm
snd                    43776  12 snd_usb_audio,snd_rawmidi,snd_hwdep,snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer
snd_page_alloc          7944  2 snd_intel8x0,snd_pcm

หากคุณได้ผลลัพธ์คล้ายๆ กับแบบนี้ แสดงว่า driver ของระบบเสียงคุณได้ถูกตรวจพบและติดตั้งเป็นที่เรียบร้อยแล้ว (โปรดสังเกตว่าในตัวอย่างนี้ snd_intel8x0 และ snd_usb_audio เป็น driver สำหรับ hardware)คุณสามารถดู directory /dev/snd สำหรับไฟล์ device

$ ls -l /dev/snd/
total 0
crw-rw----  1 root audio 116,  0 Apr  8 14:17 controlC0
crw-rw----  1 root audio 116, 32 Apr  8 14:17 controlC1
crw-rw----  1 root audio 116, 24 Apr  8 14:17 pcmC0D0c
crw-rw----  1 root audio 116, 16 Apr  8 14:17 pcmC0D0p
crw-rw----  1 root audio 116, 25 Apr  8 14:17 pcmC0D1c
crw-rw----  1 root audio 116, 56 Apr  8 14:17 pcmC1D0c
crw-rw----  1 root audio 116, 48 Apr  8 14:17 pcmC1D0p
crw-rw----  1 root audio 116,  1 Apr  8 14:17 seq
crw-rw----  1 root audio 116, 33 Apr  8 14:17 timer

ถ้าอย่างน้อยคุณมี controlC0 และ pcmC0D0p หรือที่คล้ายๆ กัน แสดงว่าระบบเสียงของคุณได้ถูกตรวจพบและติดตั้งเป็นที่เรียบร้อยแล้ว

หากไม่เป็นไปตามนี้ แสดงว่าการ์ดเสียงของคุณยังไม่ถูกตรวจพบ หากคุณต้องการความช่วยเหลือจาก IRC กรุณาใส่ผลลัพธ์จากการใช้คำสั่งข้างต้นไว้ด้วย การแก้ปัญหาในตอนนี้คือ คุณสามารถสั่งให้เครื่อง load driver ของระบบเสียงด้วยตัวคุณเอง

  • ค้นหา module สำหรับการ์ดเสียงของคุณที่ http://www.alsa-project.org/alsa-doc/ โดยโมดูลจะนำหน้าด้วย 'snd-' เช่น 'snd-via82xx'
  • Load โมดูล
 # modprobe snd-ชื่อของโมดูลของคุณ
 # modprobe snd-pcm-oss
  • ตรวจสอบหา device file ใน /dev/snd (ดูรายละเอียดทางด้านบน) และ/หรือ ทดลองใช้คำสั่ง alsamixer หรือ amixer แล้วดูผลลัพธ์ที่ออกมา
  • เพิ่ม snd-pcm-oss และ snd-ชื่อโมลดูล เข้าไปในส่วนของ MODULES ในไฟล์ /etc/rc.conf เพื่อให้ระบบเรียกใช้โมดูลเหล่านี้ในการเริ่มทำงานครั้งหน้า

เปิดใช้งาน channel และทดสอบการ์ดเสียง

ในส่วนนี้ โปรดเข้าใช้งานเป็น root หากคุณต้องการใช้งานส่วนนี้ โดยไม่เป็น root โปรดข้ามไปอ่านขั้นตอนการตั้งค่าสิทธิก่อน

  • เปิดใช้งานการ์ดเสียง

เราแนะนำให้คุณใช้ 'alsamixer' ในการตั้งค่าระดับเสียงและเปิดใช้งาน channel

คำแนะนำ หากคุณกำลังใช้ alsamixer โปรดแน่ใจว่าคุณได้ unmute หรือเปิดใช้งาน channel นั้นๆ (กด M) ด้วย เพื่อให้สามารถใช้งานเสียงได้

คุณสามารถใช้งาน 'amixer' ก็ได้ แต่มันเป็นวิธีที่สะดวกน้อยกว่า

 # amixer set Master 75 unmute
 # amixer set PCM 75 unmute
  • ทดลองเล่นไฟล์เสียง
 # aplay mywav.wav

การตั้งค่าสิทธิ

การอนุญาตให้ผู้ใช้ธรรมดาสามารถตั้งค่าเสียงได้ ทำตามขั้นตอนดังนี้

  • เพิ่มผู้ใช้เข้าไปในกลุ่ม audio:
# gpasswd -a ชื่อผู้ใช้ audio
  • ให้ผู้ใช้ของท่านออกจากระบบ แล้วเข้าสู่ระบบอีกครั้ง เพื่อให้ระบบตั้งค่าสิทธิ

การตั้งค่าระดับเสียงอัตโนมัติเมื่อระบบเริ่มต้น

  • ใช้งานคำสั่ง 'alsactl' หนึ่งครั้งเพื่อสร้างไฟล์ '/etc/asound.state'
alsactl store
  • แก้ไขไฟล์ '/etc/rc.conf' เพิ่ม 'alsa' เข้าไปในส่วนของ DAEMONS โดยมันจะเก็บรายละเอียดการตั้งค่าเสียงของคุณทุกครั้งที่ปิดเครื่อง และเรียกใช้ใหม่เมื่อเริ่มต้นใช้เครื่อง

การใช้งาน SPDIF

(ได้มาจากผู้ใช้ชื่อ gralves ในกระดานข่าวของ Gentoo)

  • ใน Gnome Volume Control, เปลี่ยน IEC958 ให้เป็น PCM ในส่วนของ Options tab
    • แก้ไฟล์ /etc/asound.state ซึ่งเป็นไฟล์ที่เก็บการตั้งค่าของ Alsa
    • หาบรรทัดที่เขียนว่า : 'IEC958 Playback Switch'. ใกล้ๆ กันนั้นคุณจะเจอบรรทัดที่เขียนว่า value:false เปลี่ยนมันให้เป็น value:true
    • หาบรรทัด 'IEC958 Playback AC97-SPSA' และเปลี่ยนค่ามันเป็น 0
    • Restart alsa

อีกวิธีหนึ่งในการเรียกใช้งาน SPDIF อัตโนมัติ (ใช้งานได้บน SoundBlaster Audigy)

  • เพิ่มคำสั่งนี้ในไฟล์ /etc/rc.local:
 # Use COAX-digital output
 amixer set 'IEC958 Optical' 100 unmute
 amixer set 'Audigy Analog/Digital Output Jack' on

คุณสามารถดูชื่อของการ์ดเสียงของคุณได้จากคำสั่ง

 amixer scontrols

ยังคงไม่มีเสียงอะไรออกมา

ถ้าคุณติดตั้ง driver เรียบร้อยแล้ว ตั้งค่าระดับเสียงแล้ว และไม่มี channel ใดๆ ที่ปิดเสียงอยู่ แล้วคุณยังไม่ได้ยินเสียงอะไรเลย การใส่บรรทัดเหล่านี้เข้าไปในไฟล์ /etc/modprobe.d/modprobe.conf อาจจะช่วยแก้ปัญหาได้ (อย่างน้อยก็กับโมดูล via82xx)

options snd-ชื่อของโมดูล ac97_quirk=0


การตั้งค่ากับ KDE

  • เรียกใช้ KDE
# startx
  • ตั้งค่าเสียงสำหรับผู้ใช้แต่ละคนด้วยคำสั่ง
# alsamixer
  • KDE 3.3 ไปที่ K Menu > Multimedia > KMix
    • เลือก Settings > Configure KMix...
    • ไม่เลือกตัวเลือก "Restore volumes on logon"
    • กด OK เป็นอันเสร็จสิ้น