HTC DriverGate – เวอร์ชันเสียง

ไอคอนเวลาอ่านหนังสือ 4 นาที. อ่าน


ผู้อ่านช่วยสนับสนุน MSpoweruser เราอาจได้รับค่าคอมมิชชันหากคุณซื้อผ่านลิงก์ของเรา ไอคอนคำแนะนำเครื่องมือ

อ่านหน้าการเปิดเผยข้อมูลของเราเพื่อดูว่าคุณจะช่วย MSPoweruser รักษาทีมบรรณาธิการได้อย่างไร อ่านเพิ่มเติม

ประตูคนขับ

หลังจากใช้ Windows Mobile ไปหนึ่งหรือสองวันแล้วรู้สึกดี เราก็กลับมาที่ปัญหาบางอย่างที่รบกวนอุปกรณ์ของเราโดยไม่จำเป็น

ดูเหมือนว่าไดรเวอร์จะส่งผลกระทบต่ออุปกรณ์ HTC ที่เลือกอีกครั้ง ซึ่งรวมถึงอุปกรณ์ไฮเอนด์รุ่นปัจจุบันทั้งหมด เช่น HTC Touch Diamond, Touch Pro, HD และ Xperia เมื่อเล่นเสียงผ่านหูฟังหรือลำโพงเป็นระยะ (โดยปกติทุกๆ 5 นาที) คุณจะได้ยินเสียง "ข้าม" สั้นๆ ในเสียง มีการอธิบายว่าเสียงเป็น lag/skip/hiccup/tick/blip ปัญหาดูเหมือนจะอยู่ลึกลงไปในไดรเวอร์อุปกรณ์ wave หรืออาจเป็นอุปกรณ์ wave ของฮาร์ดแวร์เอง (Qualcomm ดำเนินการอีกครั้งหรือไม่) ดูเหมือนว่าปัญหาจะไม่เกิดขึ้นใน A2DP

ปัญหาส่วนใหญ่ส่งผลกระทบต่อผู้เล่นบุคคลที่สามเนื่องจาก HTC ดูเหมือนจะแก้ปัญหาได้ แต่สำหรับตัวเองเท่านั้นโดยการสร้างไดรเวอร์เวฟที่กำหนดเอง

ทีม Conduits Pocket Player ได้ตรวจสอบปัญหาแล้วและกลับมาหมดกำลังใจ นี่คือสิ่งที่ได้กล่าวไว้ในหัวข้อนี้

เราได้ทำการทดสอบอย่างละเอียดเกี่ยวกับปัญหาการข้ามเสียงของ HTC และได้ข้อสรุปว่าท่อส่งน้ำไม่สามารถจัดการได้ หลังจากวิเคราะห์โปรแกรม HTC Audio Manager และไฟล์อื่นๆ (เช่น DirectShow Audio Renderer HTCRenderFlt2.dll และ HTCADXRenderer4.dll ของ HTC) เราพบว่าทั้งคู่ทำการเรียกระบบพิเศษบางอย่างในไดรเวอร์ WaveOut

นี่คือรายละเอียดทางเทคนิคบางส่วนสำหรับสิ่งที่เราพบ อันดับแรก เราไม่คิดว่าลำดับความสำคัญของเธรดหรือกระบวนการเกี่ยวข้องกับปัญหา แอปพลิเคชั่นเสียงปกติใช้วงจรของ "waveOut buffers" ที่รักษาเอาต์พุตเสียง "เต็ม" พร้อมข้อมูลเสียงเพื่อให้ระบบดึงและเล่น แอปพลิเคชันใช้ฟังก์ชัน waveOutWrite มาตรฐานเพื่อเติมบัฟเฟอร์เหล่านี้ จากมุมมองของ Pocket Player บัฟเฟอร์เหล่านี้จะเต็มเสมอ และการปรับลำดับความสำคัญจะไม่ส่งผลต่อสิ่งนี้ วิธีหนึ่งในการปรับปรุงการข้ามเสียง (ที่ส่งผลต่อ HTC TyTN) คือการเพิ่มลำดับความสำคัญของเธรดของไดรเวอร์ WaveOut โดยแก้ไขค่ารีจิสทรีภายใต้ HKLM\Drivers\Builtin\WaveOut วิธีนี้ใช้ไม่ได้ผลที่นี่ ที่น่าสนใจคือ ปัญหาการข้ามเหล่านี้เกิดขึ้นบนเดสก์ท็อปพีซี ที่นั่น ปัญหาเกี่ยวข้องกับไดรเวอร์เรียลไทม์ซึ่งใช้เวลานานเกินไปในการประมวลผล ซึ่งทำให้ไดรเวอร์เสียงไม่สามารถประมวลผลเสียงชุดถัดไปได้ สิ่งนี้เกิดขึ้นใน Vista กับไดรเวอร์ MacBook บางตัว

ตัวจัดการเสียงใช้กลไกเอาต์พุตที่แตกต่างจากการเรียก waveOut มาตรฐาน - ใช้ตัวกรองตัวแสดงเสียง DirectShow ซึ่งเป็นอีกวิธีหนึ่งในการส่งสัญญาณเสียง เมื่อพิจารณาภายในว่ามันทำงานอย่างไร มันใช้กลไกที่ต่างไปจากเดิมอย่างสิ้นเชิง มันใช้การเรียก waveOutMessage ที่เป็นกรรมสิทธิ์เพื่อเปิดคิวข้อความใหม่ ซึ่งเสียงจะถูก “สตรีม” ผ่าน

Pocket Player (และแอปพลิเคชันอื่นๆ) อาจแก้ไขปัญหานี้ได้โดยใช้ HTC Audio Renderer แทนรูทีนของ waveOut ของตัวเอง แต่จากนั้นเราจะสูญเสียคุณสมบัติเฉพาะของ Pocket Player และ Pocket Player อื่นๆ หาย เราทำการทดสอบเบื้องต้นในการสร้างกราฟตัวกรอง DirectShow (พร้อมด้วย Audio Renderer) แต่ยังคงประสบปัญหาการข้าม ดังนั้นต้องมีขั้นตอนเพิ่มเติม

ด้วยเหตุนี้ ท่อร้อยสายจึงเกี่ยวกับเรื่องนี้ว่าเป็นปัญหาเฉพาะอุปกรณ์ที่ผู้ผลิตจำเป็นต้องแก้ไข หรือหาก HTC ต้องการบันทึก "โหมดสตรีมมิง" พิเศษสำหรับไดรเวอร์เอาต์พุตเสียง เราอาจพิจารณาปรับให้เข้ากับรุ่นนั้น

หากคุณแยก Wavedev.dll ออกจาก ROM คุณจะเห็นข้อความการดีบักจำนวนนับไม่ถ้วนเกี่ยวกับ “MP3 Streams” และอื่นๆ ซึ่งบ่งชี้ถึงเส้นทางเสียงที่แยกจากกันโดยสิ้นเชิงสำหรับเพลงที่มาจากซอฟต์แวร์ หากจำเป็น เราจะเขียนปลั๊กอินเอาท์พุต WaveOut ใหม่ (รูทีนเอาท์พุตของเราใช้สถาปัตยกรรมปลั๊กอินส่วนตัวเช่นเดียวกับปลั๊กอินประเภทอื่นๆ ของเรา) ที่ใช้เอาต์พุต DirectShow

HTC ปฏิเสธที่จะบันทึกว่าพวกเขาแก้ปัญหาอย่างไร โดยกล่าวว่าพวกเขาไม่สนับสนุนซอฟต์แวร์ของบุคคลที่สาม

แน่นอน XDA-Developers ไม่เคยปล่อยให้สถานการณ์แบบนี้โกหก Thx1200 กำลังเริ่มต้นเงินรางวัลสำหรับนักพัฒนาที่สามารถสร้างโซลูชันโอเพ่นซอร์สสำหรับปัญหานี้และทำให้ชุมชนใช้งานได้ ขณะนี้เงินรางวัลมีเพียงเล็กน้อยเพียง 30 เหรียญ แต่ฉันแน่ใจว่าเราสามารถบริจาคเพิ่มเติมได้มากมายเพื่อแก้ไขปัญหาที่น่ารำคาญนี้สำหรับทุกคนที่ใช้ซอฟต์แวร์เสียงของบุคคลที่ 3

อ่านกระทู้เต็มได้ที่ XDA-Developers ที่นี่และอย่าลืมเพิ่มคำมั่นสัญญาของคุณด้วยหากคุณรู้สึกว่านี่คือสถานการณ์ที่ต้องแก้ไข

ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อต่างๆ: ไดรเวอร์เสียง, HTC