โปรแกรมสาธิต 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