Sesli Yer Paylaşımı Yaşam Döngüsü (macOS)
Hedef kitle: macOS uygulaması katkıda bulunanlar. Amaç: uyandırma sözcüğü ve bas-konuş çakıştığında sesli yer paylaşımını öngörülebilir tutmak.Mevcut amaç
- Yer paylaşımı zaten uyandırma sözcüğü nedeniyle görünür durumdaysa ve kullanıcı kısayol tuşuna basarsa, kısayol oturumu metni sıfırlamak yerine mevcut metni devralır. Kısayol basılı tutulduğu sürece yer paylaşımı açık kalır. Kullanıcı bıraktığında: kırpılmış metin varsa gönder, yoksa kapat.
- Yalnızca uyandırma sözcüğü, sessizlikte otomatik gönderim yapmaya devam eder; bas-konuş bırakıldığında hemen gönderir.
Uygulananlar (9 Aralık 2025)
- Yer paylaşımı oturumları artık her yakalama için (uyandırma sözcüğü veya bas-konuş) bir belirteç taşır. Belirteç eşleşmediğinde kısmi/nihai/gönder/kapat/seviye güncellemeleri düşürülür; böylece bayat geri çağırmalar önlenir.
- Bas-konuş, görünür olan herhangi bir yer paylaşımı metnini önek olarak devralır (yani uyandırma yer paylaşımı açıkken kısayola basmak metni korur ve yeni konuşmayı ekler). Nihai döküm için 1,5 sn’ye kadar bekler; ardından mevcut metne geri döner.
- Zil/yer paylaşımı günlükleri
info’de,voicewake.overlay,voicewake.pttvevoicewake.chimekategorilerinde üretilir (oturum başlangıcı, kısmi, nihai, gönder, kapat, zil nedeni).
Sonraki adımlar
- VoiceSessionCoordinator (actor)
- Aynı anda tam olarak bir
VoiceSession’e sahiptir. - API (belirteç tabanlı):
beginWakeCapture,beginPushToTalk,updatePartial,endCapture,cancel,applyCooldown. - Bayat belirteçler taşıyan geri çağırmaları düşürür (eski tanıyıcıların yer paylaşımını yeniden açmasını önler).
- Aynı anda tam olarak bir
- VoiceSession (model)
- Alanlar:
token,source(wakeWord|pushToTalk), commit edilmiş/geçici metin, zil bayrakları, zamanlayıcılar (otomatik gönderim, boşta),overlayMode(display|editing|sending), soğuma süresi son tarihi.
- Alanlar:
- Yer paylaşımı bağlama
VoiceSessionPublisher(ObservableObject) etkin oturumu SwiftUI’ya yansıtır.VoiceWakeOverlayViewyalnızca yayınlayıcı üzerinden render eder; küresel singleton’ları doğrudan asla değiştirmez.- Yer paylaşımı kullanıcı eylemleri (
sendNow,dismiss,edit) oturum belirteciyle koordinatöre geri çağrı yapar.
- Birleşik gönderim yolu
endCapturesırasında: kırpılmış metin boşsa → kapat; aksi haldeperformSend(session:)(gönderim zilini bir kez çalar, iletir, kapatır).- Bas-konuş: gecikme yok; uyandırma sözcüğü: otomatik gönderim için isteğe bağlı gecikme.
- Bas-konuş bittiğinde uyandırma çalışma zamanına kısa bir soğuma süresi uygula; böylece uyandırma sözcüğü hemen yeniden tetiklenmez.
- Günlükleme
- Koordinatör,
bot.moltalt sisteminde,voicewake.overlayvevoicewake.chimekategorilerinde.infogünlüklerini üretir. - Ana olaylar:
session_started,adopted_by_push_to_talk,partial,finalized,send,dismiss,cancel,cooldown.
- Koordinatör,
Hata ayıklama kontrol listesi
-
Takılı kalan bir kaplamayı yeniden üretirken günlükleri akış halinde izleyin:
- Yalnızca bir etkin oturum belirteci olduğunu doğrulayın; bayat geri çağırmalar koordinatör tarafından düşürülmelidir.
-
Bas-konuş bırakma işleminin her zaman etkin belirteçle
endCapture’i çağırdığından emin olun; metin boşsa zil veya gönderim olmadandismissbekleyin.
Geçiş adımları (önerilen)
VoiceSessionCoordinator,VoiceSessionveVoiceSessionPublisherekleyin.VoiceWakeRuntime’ı,VoiceWakeOverlayController’e doğrudan dokunmak yerine oturumları oluşturacak/güncelleyecek/sonlandıracak şekilde yeniden düzenleyin.VoicePushToTalk’yi mevcut oturumları devralacak ve bırakma sırasındaendCapture’ü çağıracak şekilde yeniden düzenleyin; çalışma zamanı soğuma süresini uygulayın.VoiceWakeOverlayController’ü yayınlayıcıya bağlayın; çalışma zamanı/PTT’den gelen doğrudan çağrıları kaldırın.- Oturum devralma, soğuma süresi ve boş metin kapatma için entegrasyon testleri ekleyin.