Sistem bir bütün olarak değil, yalnızca tek bir uygulama tarafından çıkarılan sesleri yakalamanın bir yolu var mı? WASAPI ile the entire system audio'u yakalayabilirim, fakat sadece bir uygulamadan ses yakalamak istiyorum (birçok uygulama olacak, hepsi bir kerede ses çalmaya başlayacak.)Windows 7'de tek bir uygulamanın sesini yakalama
cevap
Detours kullanılır. GetBuffer ve ReleaseBuffer da dahil olmak üzere IAudioRenderClient arabirimini kancalamak ve arabelleğindeki verileri okumak için lib'i kullanın.
Uygulama tarafından sesin çalınması için kullanılan API'lara bağlı olarak, built-in waveIn \ waveOut işlevlerini sarmak ve ses verileri boyunca geçecek bir AppInit DLL yazabilirsiniz. Bunun waveIn \ waveOut işlevleri ile çalıştığını biliyorum, ancak Windows 7'de diğer ses oynatma arabirimlerinin ne olduğundan ve AppInit hilesiyle uyumlu olup olmadıklarından emin değilim. Çekme için
AppInit'i kullanmayın, sadece askıya alınmış işlemi başlatın ve DLL'nizi enjekte edin - her iki durumda da hacky, ancak en azından makinedeki her uygulamayı etkilemezsiniz. –
Doğru, ancak bir simge tıklatıldığında başlatılan askıya/başlatmaya zor: AppInit seçeneği oldukça iyi çalışıyor. Eğer çok dikkatli olmak istiyorsanız, askıya alma/enjekte etme hilesiyle uyumlu olacak bir görüntü kaçırma işlemi yapabilirsiniz: sadece bununla ilgili herhangi bir deneyiminiz yok. – Femi
Lütfen AppInit'i hiçbir şey için kullanmayın, diğer uygulamaları çökertmek ve müşterilerinizin hayatlarını daha az müthiş hale getirmek neredeyse garantilidir. Hata ayıklayıcı API'ları kullanarak işlemleri askıya alabilir, DLL'nizi enjekte edebilir ve ardından isabet edebilirsiniz. –
Deudio'ları kullanarak IAudioRenderClient'i nasıl bağladınız? IMMDeviceEnumerator, IMMDevice :: Activate ve IAudioClient :: GetService ile denedim. Ama ne yazık ki IMMDevice :: Activate çağrılmıyor gibi görünüyor. – Cthutu