อ่าน 5 นาที
สถาปัตยกรรมเสียง Linux ขั้นสูง
Advanced Linux Sound Architecture ( ALSA ) เป็น เฟรมเวิร์กซอฟต์แวร์ และเป็นส่วนหนึ่งของ เคอร์เนลลินุ ก ซ์ ซึ่งมี อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) สำหรับ ไดรเวอร์อุปกรณ์...
สถาปัตยกรรมเสียง Linux ขั้นสูง
| อัลซ่า | |
|---|---|
ภาพหน้าจอของAlsamixer เวอร์ชัน 1.0.14 | |
| ผู้เขียนต้นฉบับ | Jaroslav Kysela [ 1 ] |
| นักพัฒนา | ทีม ALSA [ 2 ] |
| ปล่อย | 1998 |
| เวอร์ชันเสถียร | 1.2.16.1 [ 3 ] / 12 มิถุนายน 2026 |
| เขียนเป็น | C [ 4 ] |
| ระบบปฏิบัติการ | ลินุกซ์ |
| พิมพ์ | |
| ใบอนุญาต | |
| เว็บไซต์ | alsa-project.org |


Advanced Linux Sound Architecture ( ALSA ) เป็นเฟรมเวิร์กซอฟต์แวร์และเป็นส่วนหนึ่งของ เคอร์เนลลินุ ก ซ์ซึ่งมีอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) สำหรับไดรเวอร์อุปกรณ์การ์ดเสียง
เป้าหมายบางประการของโครงการ ALSA ในช่วงเริ่มต้นคือการกำหนดค่าฮาร์ดแวร์การ์ดเสียงโดยอัตโนมัติและการจัดการอุปกรณ์เสียงหลายตัวในระบบได้อย่างราบรื่น ALSA ได้รับการเผยแพร่ภายใต้GPL-2.0 หรือสูงกว่าและLGPL-2.1 หรือสูงกว่า[ 5 ]
บนระบบ Linux เซิร์ฟเวอร์เสียงเช่นsndio , PulseAudio , JACK (การแก้ไขและผสมเสียงระดับมืออาชีพที่มีความหน่วงต่ำ) และPipeWireรวมถึง API ระดับสูง (เช่นOpenAL , SDL audio เป็นต้น) ทำงานอยู่บน ALSA และไดรเวอร์อุปกรณ์การ์ดเสียงของ ALSA โดย ALSA เป็นระบบที่พัฒนาต่อจาก Open Sound System (OSS) เวอร์ชัน Linux เดิม
ประวัติศาสตร์
โครงการพัฒนา ALSA นำโดย Jaroslav Kysela และอิงตามไดรเวอร์อุปกรณ์ Linux สำหรับ การ์ดเสียง อัลตราซาวนด์ Gravisเริ่มต้นในปี 1998 และได้รับการพัฒนาแยกต่างหากจากเคอร์เนล Linux จนกระทั่งได้รับการแนะนำในชุดการพัฒนา 2.5 ในปี 2002 (2.5.4–2.5.5) [ 6 ]
ในเวอร์ชัน 2.6 ระบบนี้ได้เข้ามาแทนที่ระบบเดิมOpen Sound System (OSS) โดยค่าเริ่มต้น (แม้ว่าจะมีเลเยอร์ความเข้ากันได้แบบย้อนหลังอยู่ก็ตาม) [ 7 ]
ALSA มี API ที่ใหญ่กว่าและซับซ้อนกว่า OSS ดังนั้นจึงอาจพัฒนาแอปพลิเคชันที่ใช้ ALSA เป็นเทคโนโลยีเสียงได้ยากกว่า ถึงแม้ว่า ALSA จะสามารถตั้งค่าให้มีเลเยอร์จำลอง OSS ได้ แต่ฟังก์ชันดังกล่าวก็ไม่มีให้ใช้งานแล้วหรือไม่ได้ติดตั้งมาเป็นค่าเริ่มต้นในระบบปฏิบัติการ Linux หลายรุ่น
คุณสมบัติ
ALSA ได้รับการออกแบบโดยมีคุณสมบัติบางอย่างที่ในขณะที่เริ่มพัฒนานั้น ซอฟต์แวร์โอเพนซอร์สยังไม่รองรับ:
- การสังเคราะห์MIDIโดยใช้ฮาร์ดแวร์
- การผสมสัญญาณหลายช่อง สัญญาณด้วยฮาร์ดแวร์
- การทำงานแบบฟูลดูเพล็กซ์
- ไดรเวอร์อุปกรณ์ที่รองรับการทำงานแบบมัลติโปรเซสเซอร์และปลอดภัยต่อการทำงานแบบมัลติเธรด
นอกจากไดรเวอร์อุปกรณ์เสียงแล้ว ALSA ยังมีไลบรารีระดับผู้ใช้ สำหรับนักพัฒนาแอปพลิเคชันที่ต้องการใช้คุณสมบัติของไดรเวอร์ผ่านอินเทอร์เฟซระดับสูงกว่าอินเทอร์เฟซที่ใช้สำหรับการโต้ตอบโดยตรงกับไดรเวอร์เคอร์เนล ต่างจาก API ของเคอร์เนลที่พยายามสะท้อนความสามารถของฮาร์ดแวร์โดยตรง ไลบรารีระดับผู้ใช้ของ ALSA นำเสนอนามธรรมที่ยังคงเป็นมาตรฐานมากที่สุดเท่าที่จะเป็นไปได้ในองค์ประกอบฮาร์ดแวร์พื้นฐานที่แตกต่างกัน เป้าหมายนี้บรรลุได้บางส่วนโดยการใช้ปลั๊กอินซอฟต์แวร์ตัวอย่างเช่น การ์ดเสียงหรือชิปเสียงในตัวสมัยใหม่จำนวนมากไม่มีตัวควบคุม "ระดับเสียงหลัก" แต่สำหรับอุปกรณ์เหล่านี้ ไลบรารีระดับผู้ใช้จะให้ตัวควบคุมระดับเสียงแบบซอฟต์แวร์โดยใช้ปลั๊กอิน " softvol " และซอฟต์แวร์แอปพลิเคชันทั่วไปไม่จำเป็นต้องสนใจว่าตัวควบคุมดังกล่าวถูกใช้งานโดยฮาร์ดแวร์พื้นฐานหรือการจำลองซอฟต์แวร์ของฮาร์ดแวร์พื้นฐานนั้น
แอปพลิเคชัน
นอกเหนือจากเฟรมเวิร์กซอฟต์แวร์ภายในเคอร์เนล Linux แล้วโครงการ ALSA ยังจัดเตรียมเครื่องมือบรรทัดคำสั่ง[ 8 ] [ 9 ] [ 10 ]และยูทิลิตี้ [ 11 ]alsactl , [ 12 ]amixer , [ 13 ]arecord/aplayและTUI ที่ใช้ncurses alsamixer[ 13 ]
นอกจากนี้ยังมี GUI ที่เขียนโปรแกรมโดยนักพัฒนาบุคคลที่สามเช่น GNOME-ALSAmixer [ 14 ] (ใช้GTK ), Kmix, [ 14 ] XFCE4-mixer, LXpanel, QasHctl, QasMixer, Pavucontrol, AconnectGUI, [ 15 ] tapiir, [ 15 ] polarbear, [ 15 ] ALSAmixerGUI [ 16 ] (ใช้FLTK ), ZynAddSubFX , Yoshimi และอื่นๆ อีกมากมาย
แนวคิด
โดยทั่วไป ALSA รองรับ การ์ดได้สูงสุดแปดใบโดยมีหมายเลขตั้งแต่ 0 ถึง 7 การ์ดแต่ละใบเป็นอุปกรณ์เคอร์เนลทางกายภาพหรือเชิงตรรกะที่สามารถรับและส่งข้อมูลได้ นอกจากนี้ การ์ดแต่ละใบยังสามารถระบุได้ด้วยรหัสประจำ ตัว ซึ่งเป็นสตริงที่อธิบายความหมาย เช่น " Headset " หรือ " ICH 9 "
การ์ดมีอุปกรณ์ต่างๆโดยมีหมายเลขเริ่มต้นที่ 0 อุปกรณ์อาจเป็น ประเภท เล่นเสียง หมายความว่า อุปกรณ์นั้นจะส่งเสียงออกจากคอมพิวเตอร์ หรืออาจเป็นประเภทอื่นๆ เช่นการบันทึกการควบคุมตัวจับเวลาหรือตัวเรียงลำดับ [ 20 ] โดยค่าเริ่มต้นจะใช้อุปกรณ์หมายเลข 0 เมื่อไม่ได้ระบุอุปกรณ์ใดๆ เป็นพิเศษ
อุปกรณ์หนึ่งอาจมีอุปกรณ์ย่อยซึ่งกำหนดหมายเลขเริ่มต้นที่ 0 โดยอุปกรณ์ย่อยแต่ละตัวแสดงถึงจุดสิ้นสุดเสียงที่เกี่ยวข้องกับอุปกรณ์นั้น เช่น คู่ลำโพง หากไม่ได้ระบุอุปกรณ์ย่อย หรือหากระบุหมายเลขอุปกรณ์ย่อยเป็น −1 ระบบจะใช้อุปกรณ์ย่อยที่มีอยู่ทั้งหมด
อินเทอร์เฟซของการ์ดคือคำอธิบายของโปรโตคอล ALSA สำหรับการเข้าถึงการ์ด อินเทอร์เฟซที่เป็นไปได้ ได้แก่hw , plughw , defaultและplug:dmixอิน เทอร์เฟซ hwให้การเข้าถึงอุปกรณ์เคอร์เนลโดยตรง แต่ไม่รองรับการผสมเสียงหรือการปรับสตรีมด้วยซอฟต์แวร์ อินเทอร์เฟซplughwและdefaultเปิดใช้งานการส่งออกเสียงในกรณีที่ อินเทอร์เฟ ซ hwจะทำให้เกิดข้อผิดพลาด
โดยทั่วไป แอปพลิเคชันจะอธิบายเอาต์พุตเสียงโดยการรวมข้อมูลจำเพาะทั้งหมดที่กล่าวมาข้างต้นเข้าด้วยกันในสตริงอุปกรณ์ซึ่งมีรูปแบบใดรูปแบบหนึ่งต่อไปนี้ (ซึ่งต้องตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ):
- อินเทอร์เฟซ: การ์ด, อุปกรณ์, อุปกรณ์ย่อย
- interface:CARD=1,DEV=3,SUBDEV=2 .
สตรีม ALSA คือการไหลของข้อมูลที่แสดงถึงเสียง รูปแบบสตรีมที่พบได้บ่อยที่สุดคือPCMซึ่งต้องสร้างขึ้นในลักษณะที่ตรงกับคุณลักษณะหรือพารามิเตอร์ของฮาร์ดแวร์ รวมถึง:
- อัตราการสุ่มตัวอย่าง : โดยทั่วไปอยู่ที่ 44.1 kHz สำหรับเครื่องเสียงบ้าน หรือ 48 kHz สำหรับโฮมเธียเตอร์ แต่สำหรับงานผลิตหรือการเล่นเสียงไฮไฟ อาจสูงถึง 88.2 kHz, 96 kHz หรือแม้กระทั่ง 192 kHz
- ความกว้างของตัวอย่าง : วัดเป็นจำนวนบิตต่อตัวอย่าง (เช่น 8, 16, 24 หรือ 32 บิต/ตัวอย่าง)
- ตัวอย่างการเข้ารหัส : เช่นลำดับไบต์ (endianness)
- จำนวนช่องสัญญาณ : 1 สำหรับโมโน, 2 สำหรับสเตอริโอ หรือ 6 สำหรับAC-3 / IEC958
การนำไปใช้
เลเยอร์ ALSA System on Chip (ASoC) มีเป้าหมายเพื่อให้การสนับสนุน ALSA ที่ดีขึ้นบนระบบฝังตัวที่ใช้ การออกแบบ ระบบบนชิป (SoC) [ 21 ]
Open Sound Systemเวอร์ชัน 4 สามารถจำลอง ALSA ได้[ 22 ]
QNXใช้ระบบเสียงที่ได้มาจาก ALSA แต่ไม่เข้ากันโดยตรงกับ ALSA ชื่อไฟล์ส่วนหัวและไลบรารียังคงเป็น "asound" เหมือนกับชื่อของ ALSA [ 23 ] API ของ ALSA ใช้ การเรียก ioctl()ในลักษณะที่ไม่ได้รับอนุญาตในเคอร์เนลของ QNX [ 24 ]
ดูเพิ่มเติม
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
- คอนสเตเบิล, มาร์ค. "อัลซา วิกิ" . AlsaOpensrcOrg . เก็บถาวรจากต้นฉบับเมื่อวันที่ 29 มีนาคม 2002 . เรียกดูเมื่อวันที่ 18 กรกฎาคม 2021 .
เหตุผลบางประการที่เว็บไซต์นี้ยังคงอยู่คือ ไม่มีใครจากเว็บไซต์ ALSA อย่างเป็นทางการเคยมีส่วนร่วมใดๆ ในเว็บไซต์นี้ (ก่อนที่เว็บไซต์อย่างเป็นทางการจะเกิดขึ้น เว็บไซต์นี้มีมาก่อนวิกิอย่างเป็นทางการหลายปี) ไม่มีใครเสนอการรวมอย่างเป็นทางการหรืออย่างเป็นทางการ ไม่มีใครแสดงความสนใจอย่างจริงจังที่จะช่วยรวมเว็บไซต์เหล่านั้น และที่สำคัญที่สุดคือ มีผู้เข้าชมจากภายนอกและจาก Google จำนวนมากที่เข้ามายังเว็บไซต์นี้โดยตรงเพราะเว็บไซต์นี้มีมานานแล้ว
| โหมดผู้ใช้ | แอปพลิเคชันของผู้ใช้ | bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ... | ||||
|---|---|---|---|---|---|---|
| ส่วนประกอบของระบบ | เริ่มต้น daemon : OpenRC , runit , systemd , ... | โปรแกรมบริการระบบ : polkitd , smbd , sshd , udevd , ... | ระบบจัดการหน้าต่าง : X11 , Wayland , SurfaceFlinger (Android) | กราฟิก : Mesa , AMD Software , ... | ไลบรารีอื่นๆ: GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ... | |
| ไลบรารีมาตรฐาน C | fopenexecv... ( มากถึง 2000 ซับรูทีน ) glibc มีเป้าหมายที่จะทำงานเร็วmuslมีเป้าหมายที่จะมีขนาดเล็กuClibcมุ่งเป้าไปที่ระบบฝังตัว bionicถูกเขียนขึ้นสำหรับAndroidเป็นต้น ทั้งหมดนี้มีเป้าหมายที่จะmallocเข้ากันได้กับ POSIX / SUSmemcpylocaltimepthread_create | |||||
| โหมดเคอร์เนล | เคอร์เนลลินุกซ์ | stat, splice, dup, read, open, ioctl, write, mmap, , close, exitฯลฯ (ประมาณ 380 การเรียกใช้ระบบ) อินเทอร์เฟซการเรียกใช้ระบบ (SCI) ของเคอร์เนล Linux มีเป้าหมายที่จะเข้ากันได้ กับ POSIX / SUS [ 1 ] | ||||
| ระบบย่อย การจัดตารางเวลาของกระบวนการ | ระบบย่อย IPC | ระบบย่อย การจัดการหน่วยความจำ | ระบบย่อย ไฟล์เสมือน | ระบบย่อยเครือข่าย | ||
| ส่วนประกอบอื่นๆ: ALSA , DRI , evdev , klibc , LVM , device mapper , Linux Network Scheduler , Netfilter โมดูลความปลอดภัยของ Linux : SELinux , TOMOYO , AppArmor , Smack | ||||||
| ฮาร์ดแวร์ ( ซีพียูหน่วยความจำหลักอุปกรณ์จัดเก็บข้อมูลฯลฯ) | ||||||
- ^ "คู่มือผู้ดูแลระบบ README" . ที่เก็บ Git ของ Kernel.org .
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ สถาปัตยกรรมเสียง Linux ขั้นสูง
Advanced Linux Sound Architecture ( ALSA ) เป็น เฟรมเวิร์กซอฟต์แวร์ และเป็นส่วนหนึ่งของ เคอร์เนลลินุ ก ซ์ ซึ่งมี อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) สำหรับ ไดรเวอร์อุปกรณ์...
ประวัติศาสตร์
โครงการพัฒนา ALSA นำโดย Jaroslav Kysela และอิงตามไดรเวอร์อุปกรณ์ Linux สำหรับ การ์ดเสียง อัลตราซาวนด์ Gravis เริ่มต้นในปี 1998 และได้รับการพัฒนาแยกต่างหากจากเคอร์เนล Linux จนกระทั่งได้รับการแนะนำในชุดการพัฒนา 2.5 ในปี 2002 (2.5.4–2.5.5) [ 6 ]
คุณสมบัติ
ALSA ได้รับการออกแบบโดยมีคุณสมบัติบางอย่างที่ในขณะที่เริ่มพัฒนานั้น ซอฟต์แวร์โอเพนซอร์สยังไม่รองรับ:
แอปพลิเคชัน
นอกเหนือจากเฟรมเวิร์กซอฟต์แวร์ภายในเคอร์เนล Linux แล้ว โครงการ ALSA ยังจัดเตรียมเครื่องมือบรรทัดคำสั่ง [ 8 ] [ 9 ] [ 10 ] และยูทิลิตี้ [ 11 ] alsactl , [ 12 ] amixer , [ 13 ] arecord/aplay และ TUI ที่ ใช้ncurses alsamixer [ 13 ]