โปรแกรมสาธิต JavaScript Text-to-Speech สำหรับจำลองสถานีตัวเลขประสบปัญหาความเข้ากันได้ข้ามแพลตฟอร์ม

ทีมชุมชน BigGo
โปรแกรมสาธิต JavaScript Text-to-Speech สำหรับจำลองสถานีตัวเลขประสบปัญหาความเข้ากันได้ข้ามแพลตฟอร์ม

โปรแกรมสาธิต JavaScript ที่สร้างสรรค์ซึ่งจำลองสถานีตัวเลขที่น่าขนลุกด้วยเทคโนโลยี text-to-speech ของเบราว์เซอร์ได้จุดประกายการอภิปรายในชุมชนเกี่ยวกับความเข้ากันได้ของเบราว์เซอร์และความสมจริง โค้ดขนาด 1KB ที่ออกแบบมาสำหรับการแข่งขัน js1024 ในธีม Creepy ใช้ Web Speech API เพื่อสร้างตัวเลขและคำศัพท์แบบสุ่มในหลายภาษาพร้อมการปรับเปลี่ยนระดับเสียงและความเร็ว

การใช้งานทางเทคนิค:

  • ข้อจำกัดด้านขนาด: สูงสุด 1,024 ไบต์
  • API ที่ใช้: Web Speech Synthesis API
  • แหล่งคำศัพท์: Object.getOwnPropertyNames(globalThis) - ให้ผลลัพธ์มากกว่า 1,900 คำ
  • การเลือกเสียง: เข้าถึงเสียงของระบบแบบไดนามิกผ่าน speechSynthesis.getVoices()
  • เอฟเฟกต์เสียง: การปรับระดับเสียง (0-2x) และอัตราการพูด (0-1x) แบบสุ่ม

ปัญหาความเข้ากันได้ของเบราว์เซอร์เกิดขึ้น

โปรแกรมสาธิตทำงานได้อย่างน่าเชื่อถือในบางแพลตฟอร์มแต่ล้มเหลวโดยสิ้นเชิงในแพลตฟอร์มอื่น ผู้ใช้รายงานความสำเร็จกับ Firefox บน Windows 11 และ Brave บน macOS ในขณะที่ประสบกับความเงียบโดยสิ้นเชิงบน iOS Safari, Android Chrome และเบราว์เซอร์บน Linux ปัญหาความเข้ากันได้เกิดจากการใช้งาน SpeechSynthesis API ที่แตกต่างกันระหว่างเบราว์เซอร์และระบบปฏิบัติการ

ในระบบ Linux ผู้ใช้พบข้อผิดพลาด JavaScript เมื่อโค้ดพยายามเข้าถึงคุณสมบัติเสียงที่ไม่มีอยู่ ปัญหาดูเหมือนจะเกี่ยวข้องกับส่วนประกอบ text-to-speech ที่หายไปซึ่งต้องติดตั้งแยกต่างหาก เบราว์เซอร์บางตัวไม่เปิดเผยฟังก์ชัน speech synthesis ทำให้ผู้ใช้ได้รับประสบการณ์ที่เงียบ

สถานะความเข้ากันได้ของเบราว์เซอร์:

  • ✅ ใช้งานได้: Firefox ( Windows 11 ), Brave ( macOS ), Chromium ( Linux )
  • ❌ ใช้งานไม่ได้: iOS Safari , Android Chrome , Brave ( Linux )
  • ⚠️ ใช้งานได้บางส่วน: Desktop ChromeOS (มีปัญหาตัวเลือกเสียง)

ชุมชนปรับปรุงความสมจริง

แม้จะชื่นชมแนวทางที่สร้างสรรค์ แต่สมาชิกชุมชนสังเกตเห็นความแตกต่างที่สำคัญจากสถานีตัวเลขจริง สถานีจริงมักจะประกาศตัวเลขแต่ละหลักแทนที่จะเป็นตัวเลขเต็ม โดยพูดว่า seven. three. four. แทนที่จะเป็น seven hundred and thirty four พวกเขายังมีเสียงรบกวนพื้นหลังและเสียงรบกวนวิทยุที่เพิ่มบรรยากาศลึกลับ

เริ่มต้นด้วยต้องมีเสียงรบกวนและเสียงคลิกที่หลากหลาย ประการที่สอง สถานีตัวเลขโดยทั่วไปไม่พูดว่า 'seven hundred and thirty four' พวกเขามักจะพูดว่า 'seven. three. four.'

สมาชิกชุมชนคนหนึ่งสร้างเวอร์ชันที่ปรับปรุงแล้วซึ่งแก้ไขข้อกังวลเหล่านี้ โดยเพิ่มการสร้างเสียงรบกวนพื้นหลังและการแยกตัวเลขที่เหมาะสม โค้ดที่ปรับปรุงแล้วของพวกเขายังคงอยู่ในขีดจำกัด 1KB ในขณะที่ส่งมอบประสบการณ์สถานีตัวเลขที่สมจริงมากขึ้น

สถานีตัวเลขจริงเทียบกับสถานีตัวเลขจำลอง:

  • สถานีจริง: การออกเสียงตัวเลขแต่ละหลัก ("7. 3. 4.")
  • เวอร์ชันสาธิต: การออกเสียงตัวเลขเต็ม ("seven hundred thirty four")
  • องค์ประกอบที่ขาดหายไป: เสียงรบกวนพื้นหลัง, สัญญาณรบกวนวิทยุ, เสียงคลิก
  • คุณลักษณะของแท้: หลายภาษา, รูปแบบการพูดที่หลากหลาย

นวัตกรรมทางเทคนิคภายในข้อจำกัด

โปรแกรมสาธิตต้นฉบับแสดงให้เห็นการแก้ปัญหาที่ชาญฉลาดสำหรับขีดจำกัดขนาด 1KB แทนที่จะจัดเก็บรายการคำ มันดึงคำศัพท์จากคุณสมบัติของ global object ของเบราว์เซอร์โดยใช้ Object.getOwnPropertyNames(globalThis) เทคนิคนี้ให้ผลลัพธ์มากกว่า 1,900 คำรวมถึงคำที่น่าขนลุกอย่างเหมาะสม เช่น Event, Atomics และ Geolocation

โค้ดยังเข้าถึงเสียงระบบที่มีอยู่แบบไดนามิกเพื่อให้ผลลัพธ์หลายภาษา ทำให้คำภาษาอังกฤษฟังดูแปลกใหม่เมื่อประมวลผลผ่านเอนจินภาษาต่าง ๆ การปรับระดับเสียงและอัตราแบบสุ่มสร้างการเปลี่ยนแปลงเสียงที่น่าไม่สบายใจซึ่งทำให้โปรแกรมสาธิตน่าขนลุกอย่างแท้จริงเมื่อทำงานได้อย่างถูกต้อง

แม้จะมีข้อจำกัดทางเทคนิคและปัญหาความเข้ากันได้ โครงการนี้แสดงให้เห็นการใช้ web API อย่างสร้างสรรค์ภายในข้อจำกัดที่รุนแรง ข้อเสนอแนะที่สร้างสรรค์และการปรับปรุงของชุมชนแสดงให้เห็นว่าโครงการ code golf สามารถพัฒนาไปเกินขอบเขตเดิมได้อย่างไรในขณะที่ยังคงรักษาวิสัยทัศน์สร้างสรรค์หลักไว้

อ้างอิง: 1KB JS Numbers Station