ว่าจะเขียนนานละว่าระหว่าง ASIO / WASAPI / WASAPI Eventing / Kernel Streaming จะเลือกอะไรดี (ยุคนี้คงไม่มีคนอยากใช้ DirectSound/Waveout แทนหรอกนะ) ผมขออธิบายเป็นประเด็นคร่าวๆดังนี้นะครับ
1. ทุกตัวที่กล่าวล้วนทำงานเป็น kernel streaming ทั้งหมด แต่จะมี wrapper ต่างกัน
2. ASIO เป็นมาตราฐานที่อยู่มายาวนานและต้องเขียน driver ให้เฉพาะเท่านั้น ใครจะใช้ ASIO4ALL ไปใช้ kernel streaming แทนดีกว่าครับ
3. WASAPI แบบเดิมๆเป็น push pull ซึ่ง performance ไม่ดีเท่าไหร่เลยมีแบบ eventing มาแทนซึ่งทำ latency ได้ต่ำลงถึงราวๆ 5ms โดยเฉลี่ย ถ้าให้เลือกระหว่างสองตัวนี้เลือก eventing ก่อนดีกว่า
4. มาตราฐาน Native DSD จะทำงานบน ASIO ส่วน DSD over PCM หรือ DoP จะทำงานบน WASAPI Eventing
5. Kernel Streaming เป็น output ที่ใช้ KS API เรียกตรงๆไม่ผ่าน layer ที่มาจัดการเพิ่ม ถือว่าเป็นอะไรที่ direct ที่สุด
จากข้อมูลดังกล่าวนี้ หากใช้ไฟล์ DSD ด้วยก็ควรจะเลือก ASIO หรือ WASAPI Eventing ตามที่เครื่องสนับสนุนมาก่อน หากไม่ได้ใช้ DSD ให้ลองเลือกดังนี้ครับ
Kernel Streaming > ASIO > WASAPI Eventing > WASAPI
ที่เลือก Kernel Streaming ก่อน ASIO ก็เพราะ
1. ASIO ใช่ว่าจะเขียนดีกว่า Kernel Streaming เสมอไป บางรุ่นเขียน driver ASIO มา performance แย่กว่า kernel streaming ก็มี
2. ยังไงก็ให้ลอง Kernel Streaming ก่อนเพราะว่าตรงกว่าแล้วดูว่าคุมอยู่ไหม ลง latency ต่ำๆได้ stable ดีพอหรือเปล่า
3. ถ้า performance Kernel Streaming แย่กว่า ASIO ชัดเจนค่อยเปลี่ยนไป ASIO ครับ
ส่วน WASAPI นั้น จากที่คุยกับ Josef คนทำ JPLAY เค้าเล่ามาว่า WASAPI จริงๆ latency ยังไงก็ตันที่ 5ms เพราะ driver wrapper ของ Microsoft มันช้า แต่กับงาน USB 5ms ถือว่าเป็นอะไรที่ตาม spec มาตราฐานอยู่แล้วจึงไม่น่ามีปัญหาอะไรมาก ถ้าเครื่องใช้ไม่ได้จริงๆในทุก configuration ค่อยปรับลงมานะครับ