Ses Veri Blokları

[Waveform Audio bu sayfayla ilişkilendirilmiş özellik eski bir özelliktir. bunun yerini WASAPI ve Ses Graflarıalmıştır. WASAPI ve Ses Grafları, Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda yeni kodun Waveform Audioyerine WASAPI ve Ses Grafları kullanmasını kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]

waveInAddBuffer ve waveOutWrite işlevleri, uygulamaların kayıt veya kayıttan yürütme amacıyla cihaz sürücülerine geçirmek üzere veri blokları ayırmasını gerektirir. Bu işlevlerin her ikisi de veri bloğunu açıklamak için WAVEHDR yapısını kullanır.

Bu işlevlerden birini kullanarak bir veri bloğunu bir cihaz sürücüsüne geçirmeden önce, veri bloğu ve veri bloğunu açıklayan üst bilgi yapısı için bellek ayırmanız gerekir. Üst bilgiler aşağıdaki işlevler kullanılarak hazırlanabilir ve hazır hale getirilebilir.

Fonksiyon Açıklama
waveInPrepareHeader Waveform-audio giriş veri bloğunu hazırlar.
waveInUnprepareHeader Waveform-audio giriş veri bloğundaki hazırlığı temizler.
waveOutPrepareHeader Dalga biçimi-ses çıkış veri bloğunu hazırlar.
waveOutUnprepareHeader Waveform-audio çıkış veri bloğundaki hazırlığı temizler.

 

Bir ses veri bloğunu bir cihaz sürücüsüne geçirmeden önce, waveInPrepareHeader veya waveOutPrepareHeadergeçirerek veri bloğunu hazırlamanız gerekir. Cihaz sürücüsü veri bloğuyla bittiğinde ve döndürdüğünde, ayrılan bellek boşaltılmadan önce veri bloğunu waveInUnprepareHeader veya waveOutUnprepareHeader geçirerek bu hazırlığı temizlemeniz gerekir.

Waveform-audio giriş ve çıkış verileri tek bir veri bloğunda yer almak için yeterince küçük değilse, kayıttan yürütme veya kayıt tamamlanana kadar uygulamaların cihaz sürücüsüne sürekli olarak veri blokları sağlaması gerekir.

Tek bir veri bloğu kullanılsa bile, uygulamanın veri bloğu ve üst bilgi yapısıyla ilişkili belleği boşaltması için bir cihaz sürücüsünün veri bloğuyla ne zaman bittiğini saptayabilmesi gerekir. Bir cihaz sürücüsünün veri bloğuyla ne zaman biteceğini belirlemenin birkaç yolu vardır:

  • Bir veri bloğuyla tamamlandığında sürücü tarafından gönderilen bir iletiyi almak için bir geri çağırma işlevi belirterek
  • Olay geri çağırma kullanarak
  • Bir veri bloğuyla tamamlandığında sürücü tarafından gönderilen bir iletiyi almak için bir pencere veya iş parçacığı belirterek
  • her veri bloğuyla gönderilen WAVEHDR yapısının dwFlags üyesindeki WHDR_DONE biti yoklayarak

Bir uygulama gerektiğinde cihaz sürücüsüne veri bloğu almazsa, kayıttan yürütmede sesli bir boşluk veya gelen kayıtlı bilgi kaybı olabilir. Bu, en az bir çift arabelleğe alma düzeni gerektirir ve cihaz sürücüsünün en az bir veri bloğu önünde kalır.

Aşağıdaki konularda, bir cihaz sürücüsünün veri bloğuyla ne zaman biteceğini belirlemenin yolları açıklanmaktadır:

Sürücü İletilerini İşlemek için Geri Çağırma İşlevi Kullanma