Tanaka Masayuki ได้พัฒนาไลบรารี PCMFlow722 ที่ช่วยให้สามารถสื่อสารเสียงความละเอียดสูง (HD Voice) แบบเรียลไทม์สองทาง (Half-Duplex) ผ่าน ESP-NOW บนบอร์ด ESP32 ที่ติดตั้งลำโพงและไมโครโฟนได้ โดยทำให้บอร์ดสามารถทำงานเสมือนเป็นวิทยุสื่อสาร (Walkie-Talkie) ได้
ไลบรารีนี้เป็นส่วนเสริมที่เพิ่มการรองรับตัวแปลงสัญญาณเสียง G.722 Wideband Codec ให้กับไลบรารี PCMFlow ซึ่งเป็นไลบรารีถอดรหัสและส่งสัญญาณเสียงแบบ lightweight สำหรับ Arduino โดยเดิมรองรับไฟล์เสียงแบบ PCM, MP3 และ FLAC อยู่แล้ว เนื่องจากรูปแบบเสียง PCM และ FLAC ใช้แบนด์วิดท์สูงเกินไปสำหรับการส่งข้อมูลผ่าน ESP-NOW ขณะที่ MP3 ไม่เหมาะกับงานสื่อสารเสียงแบบเรียลไทม์ ผู้พัฒนาจึงเลือกใช้ตัวแปลงสัญญาณเสียง G.722
The PCMFlowG722 library and G.722 codec enable HD voice with “7 kHz audio at 16 kHz sampling using the same 64 kbps wire budget as G.711 — same packet size, twice the audio bandwidth”, as explained by Tanaka. The table below compares G.711, G.722, and Opus codecs and libraries.
ประเด็นสำคัญของโครงการนี้อยู่ที่คำว่า “HD Voice” (เสียงความละเอียดสูง) เนื่องจากก่อนหน้านี้มีการพัฒนาระบบสื่อสารเสียงสองทางผ่าน ESP-NOW มาแล้วหลายโครงการ เช่น โครงการ esp32-walkie-talkie ของ Atomic14 เมื่อประมาณ 5 ปีก่อน และล่าสุดคือโโครงการ Adafruit ESP-NOW Walkie-Talkie ที่มีเอกสารประกอบอย่างละเอียด แต่โครงการเหล่านี้มักใช้ตัวแปลงสัญญาณเสียง G.711 ซึ่งให้คุณภาพเสียงต่ำกว่า หรือใช้เสียงที่ถูกบีบอัดในรูปแบบอื่น
ไลบรารี PCMFlowG722 และตัวแปลงสัญญาณเสียง G.722 ช่วยให้สามารถส่งเสียงแบบ HD Voice ได้ โดยให้คุณภาพเสียงที่ดีกว่าในขณะที่ยังคงใช้แบนด์วิดท์เท่าเดิม ตามที่ Tanaka อธิบายว่า G.722 สามารถรองรับ “เสียงที่มีแบนด์วิดท์ 7 kHz ด้วยอัตราการสุ่มตัวอย่าง 16 kHz โดยใช้บิตเรต 64 kbps เท่ากับ G.711 — ขนาดแพ็กเก็ตเท่าเดิม แต่ได้แบนด์วิดท์เสียงมากเป็นสองเท่า” ตารางด้านล่างแสดงการเปรียบเทียบระหว่างตัวแปลงสัญญาณและไลบรารี G.711, G.722 และ Opus.
| คุณสมบัติ | PCMFlowG711 | PCMFlowG722 (ไลบรารีนี้) | PCMFlowOpus |
|---|---|---|---|
| ย่านความถี่เสียง (Audio Band) | Narrowband (8 kHz / ≤ 3.4 kHz) | Wideband (16 kHz / ≤ 7 kHz) | Narrowband / Wideband / Fullband (8–48 kHz) |
| บิตเรตสำหรับเสียงพูด (Bitrate) | 64 kbps คงที่ | 64 kbps คงที่ (Mode 1) | โดยทั่วไป 16–32 kbps |
| อัตราการบีบอัดเมื่อเทียบกับ PCM 16 บิตแบบดิบ | 2 เท่า | 4 เท่า | 10–15 เท่า |
| พื้นที่หน่วยความจำแฟลชที่ใช้โดย Codec | น้อยกว่า 4 KB | ประมาณ 10 KB | ประมาณ 150–180 KB |
| ภาระการประมวลผลของ CPU | แทบไม่มี | ต่ำ | ค่อนข้างสูงสำหรับไมโครคอนโทรลเลอร์ระดับ Cortex-M0/M3 |
| สิทธิบัตร / ความซับซ้อนด้านลิขสิทธิ์ | ไม่มี (มาตรฐานปี 1972 หมดอายุแล้ว) | ไม่มี (มาตรฐานปี 1988 หมดอายุแล้ว และแกนหลักเป็น Public Domain) | ใช้งานได้ฟรีภายใต้สิทธิ์ใช้งานแบบ Royalty-Free พร้อมซอร์สโค้ด BSD 3-Clause |
| คุณภาพเสียง | ระดับโทรศัพท์พื้นฐาน (Toll-Grade Telephony) | เสียง HD สำหรับงานโทรศัพท์แบบ Wideband | รองรับ Wideband และ Fullband ให้คุณภาพเสียงดีกว่ามาก |
แม้ว่า Opus จะสามารถทำงานได้ที่บิตเรตต่ำกว่าและรองรับคุณภาพเสียงระดับ Full-Band ได้ แต่ตัวแปลงสัญญาณ G.722 มีความซับซ้อนน้อยกว่าและใช้ทรัพยากรระบบต่ำกว่า ทั้งในด้านพลังประมวลผลของ CPU และพื้นที่จัดเก็บข้อมูล นอกจากนี้ G.722 ยังเหมาะอย่างยิ่งสำหรับการใช้งานร่วมกับ ESP-NOW เนื่องจากโปรโตคอลดังกล่าวรองรับขนาดข้อมูล (Payload) ได้สูงสุด 250 ไบต์ต่อแพ็กเก็ต โดยเฟรมเสียง G.722 ที่มีความยาว 20 มิลลิวินาที และอัตราสุ่มตัวอย่าง 16 kHz จะมีขนาดเพียง 160 ไบต์ ซึ่งเท่ากับ G.711 แต่สามารถส่งสัญญาณเสียงได้ด้วยแบนด์วิดท์เสียงที่กว้างกว่าเป็น 2 เท่า ในทางกลับกันถ้าใช้ข้อมูลเสียงแบบ PCM ดิบ (Raw PCM) โมโน 16 บิต ที่ 16 kHz จะต้องใช้ข้อมูลถึง 640 ไบต์ ต่อเฟรม ดังนั้น G.722 จึงสามารถบีบอัดข้อมูลได้ประมาณ 4 เท่า เแพ็กเก็ตและทรัพยากรของ ESP32.
ไลบรารีนี้ประกอบด้วย ตัวเข้ารหัส (Encoder) G.722 สำหรับบีบอัดสัญญาณเสียง PCM ที่อัตราสุ่มตัวอย่าง 16 kHz ให้เป็นรูปแบบ G.722 และ ตัวถอดรหัส (Decoder) ที่ทำหน้าที่แปลงข้อมูล G.722 กลับมาเป็นสัญญาณ PCM ถ้าต้องการทดลองใช้งานบนบอร์ดของตนเอง ตัวอย่างโปรแกรม EspNowTransceiver.ino Arduino sketch เป็นตัวเลือกที่เหมาะสมที่สุด โดยโปรแกรมนี้ทำหน้าที่เป็น เครื่องรับ-ส่งสัญญาณเสียง HD แบบ Half-Duplex ผ่าน ESP-NOW และใช้เฟิร์มแวร์ชุดเดียวกันสำหรับทั้งโหมดส่งและโหมดรับ
ปัจจุบันไลบรารีได้รับการทดสอบบนบอร์ด M5Stack Core2 มาพร้อมกับชิป ESP32, PSRAM 8MB, SPI Flash 16MB, จอแสดงผลขนาด 2 นิ้วสำหรับแสดงช่องสัญญาณ ESP-NOW, ลำโพงกำลังขับ 1 วัตต์ (1W-0928) และไมโครโฟน SPM4123 การทำงานของระบบค่อนข้างเรียบง่าย โดยเมื่อผู้ใช้กดปุ่ม A ค้างไว้ เสียงจากไมโครโฟนจะถูกส่งกระจาย (Broadcast) ผ่าน ESP-NOW ไปยังอุปกรณ์ Core2 หนึ่งเครื่องหรือหลายเครื่องพร้อมกัน ส่วนในช่วงเวลาที่ไม่ได้กดปุ่ม อุปกรณ์จะสลับไปทำงานในโหมดตัวรับสัญญาณเสียง (Audio Receiver)
แปลจากบทความ : PCMFlow722 library enables two-way real-time HD voice over ESP-NOW with G.722 audio codec

บรรณาธิการข่าวและบทความภาษาไทย CNX Software ได้มีความสนใจในด้านเทคโนโลยี โดยเฉพาะ Smart Home และ IoT


