
Fragment لإضافة التحكم الصوتي عبر Spokestack إلى أي تطبيق Android. يمكنك العثور على تطبيق تجريبي بسيط يعرض الدرج قيد التنفيذ في دليل example .
عند إضافة جزء علبة Spokestack إلى تصميمك ، ستحصل على زر ميكروفون على شكل علامة تبويب على جانب الشاشة ( أي الجانب الذي يتم تشغيله لك ؛ المزيد على ذلك لاحقًا). يكشف النقر أو سحب علامة التبويب عن بقية الدرج ، الذي يتم ترتيبه مثل دفق الرسائل في تطبيق الدردشة. يؤدي فتح الدرج إلى تنشيط الميكروفون ، وأي شيء يقول المستخدم سيتم إرساله من خلال خدمة التعرف على الكلام التلقائي (ASR) وعرضها كنص. ثم يتم إرسال هذا النص إلى نموذج فهم اللغة الطبيعية (NLU) للتصنيف. يتم إرسال نتائج التصنيف إلى مكون التطبيق الذي أنشأته للاستماع إلى الأحداث من الدرج ، والتي يمكن أن تنتج استجابة تعرضها الدرج وقراءتها إلى المستخدم عبر خدمة توليف SPOKESTACK النصية (TTS). سيتم إعادة تخصيص الميكروفون إذا قامت استجابة التطبيق بتوجيهها إلى ؛ خلاف ذلك ، سوف تغلق الدرج وتعطيل ASR.
ومثل هذا ، لقد أضفت صوتًا إلى تطبيقك!

أوه ، وبعد هذا التفاعل الأولي ، يمكن فتح الدرج بكلمة الاستيقاظ بدلاً من الصنبور. كلمة Wakeword هي "Spokestack" افتراضيًا ، ولكن يمكن تخصيصها.
إذا لم يكن بعض ذلك منطقيًا ، فلا تخف! تابع القراءة ، وسنقوم بتغطية جميع التفاصيل أدناه.
ملاحظة : اعتادت Tpokestack Tray استضافتها على JCenter ، ولكن منذ الإعلان عن توقفها ، نقلنا التوزيع إلى Maven Central. يرجى التأكد من أن ملف build.gradle على مستوى الجذر يتضمن mavenCentral() في كتلة repositories من أجل الوصول إلى الإصدارات> = 0.4.1.
تأكد من أنك تستخدم الإصدار 0.4.2 أو أعلى لحل التبعية بشكل صحيح على مكتبة Spokestack الأساسية بعد أن يصبح Jcenter غير ممكن.
بشكل افتراضي ، يتعامل Tpokestack Tray مع ASR و NLU و TTS للتفاعلات الصوتية مع المستخدمين - وهذا يحول صوتهم إلى رسالة نصية ، ومعالجة هذا النص لإنتاج إجراء ، وتوليف استجابة التطبيق ليتم قراءتها مرة أخرى إلى المستخدم. لمزيد من المعلومات حول هذه الميزات ، راجع مستندات Spokestack.
لاستخدام NLU و TTS ، ستحتاج إلى حساب Spokestack مجاني. من صفحة حسابك ، ستتمكن من إنشاء نماذج NLU وتنزيلها ؛ وهوية العميل والمفتاح السري مطلوب في وقت التشغيل لطلبات TTS.
أولاً ، على الرغم من ذلك ، أضف التبعية إلى تطبيقك الخاص بـ build.gradle (تحقق من شارة JCenter أعلاه للحصول على أحدث إصدار):
implementation ' io.spokestack:tray:0.4.1 ' كما ذكر أعلاه ، يتم تنفيذ علبة Spokestack Fragment يتجه إلى أعلى Activity الحالي ويتعامل مع التفاعل الصوتي ، لذلك سترغب في إضافته إلى تصميم نشاطك:
<!-- nested in the main layout, after other views/sublayouts -->
< include
android : id = " @+id/tray_fragment "
layout = " @layout/spokestack_tray_fragment "
/> ملاحظة : بناءً على تخطيط التطبيق الخاص بك ، قد تضطر أيضًا إلى إضافة android:clipChildren="false" إلى تخطيط (تخطيطات) الوالدين للشظية لتجنب اختفاء علامة التبويب الميكروفون مع افتتاح الدرج.
ثم اجعل نشاطك نفسه يمتد TrayActivity (فئة فرعية من AppCompatActivity ) ، وتنفيذ الطرق التي يتطلبه ، وستهتم المكتبة بالباقي.
إذا كنت تفضل القيام بالإعداد بنفسك ، فإليك عينة لا تستخدم TrayActivity :
import io.spokestack.tray.*
class MyActivity : AppCompatActivity (), SpokestackTrayListener {
lateinit var tray : SpokestackTray
// ...
override fun onCreate ( savedInstanceState : Bundle ? ) {
val config = TrayConfig . Builder ()
// credentials from your Spokestack account
.credentials( " spokestack-client-id " , " spokestack-secret-key " )
.wakewordModelURL( " https://path-to-wakeword-models " )
.nluURL( " https://path-to-nlu-files " )
// note the implementation of `SpokestackTrayListener` in the class declaration
.withListener( this )
// optional builder customization; see the documentation for more details...
.build()
supportFragmentManager.fragmentFactory = SpokestackTrayFactory (config)
// note that the factory is instantiated and set on the manager BEFORE calling
// `super.onCreate()`
super .onCreate(savedInstanceState)
}
override fun onStart () {
// set the value of the lateinit `tray` var
tray = SpokestackTray .getInstance(config)
super .onStart()
} عند تنزيل نماذج Spokestack Wakeword أو NLU ، سيكون لديك العديد من عناوين URL لملفات مختلفة. يتطلب wakewordModelURL و nluURL أعلاه فقط المسار إلى الدليل ذي الصلة ، وليس عناوين URL الخاصة بالملفات. لذلك بالنسبة إلى العرض التجريبي "Spokestack" WakeWord ، قم بتعيين wakewordModelURL على "https://d3dmqd7cy685il.cloudfront.net/model/wake/spokestack/".
تم تصميم الدرج للاستخدام السلس عبر الأنشطة - على سبيل المثال ، للسماح للمستخدم بمواصلة إعطاء أمر صوتي بينما يقوم التطبيق بتبديل أنشطة - بحيث يتم تخزين حالته خارج الجزء نفسه والبقاء على قيد الحياة تدمير الشظايا. إذا احتاج تطبيقك إلى إصدار الموارد التي تحتفظ بها الدرج ومثالها الأساسي Spokestack ، فاستدعاء طريقة Stray's stop() . إذا كنت بحاجة إلى إعادة تمكين التحكم الصوتي قبل تدمير مثيل جزء الدرج الحالي ، فيجب عليك استدعاء start() .
إذا كنت ترغب في الاحتفاظ بحالة الدرج سليمة بعد وفاة العملية ، فيمكنك تخزينها في أساليب onSaveInstanceState ونشاطها الأولي و onRestoreInstanceState باستخدام أساليب getState() و loadState() ؛ انظر وثائقهم لمزيد من التفاصيل.
هناك احتمالات أنه إذا كنت تسمح للمستخدم بالتحدث إلى تطبيقك ، فأنت تريد أن يتحدث التطبيق مرة أخرى. تم دمج الدرج مع خدمة TTS الخاصة بـ Spokestack ، لذا فإن تصنيع الصوت سهل بنفس القدر من نسخه.
عندما تقوم بتمديد TrayActivity ، فإن إحدى الطرق التي يجب عليك تنفيذها هي getTrayListener() ، والتي تقوم بإنشاء وإرجاع SpokestackTrayListener . تساعد هذه الواجهة تطبيقك في الرد على الأحداث المستلمة وإنتاج الدرج. لأن كل حالة استخدام فريدة من نوعها ، فإن جميع أساليبها اختيارية ؛ الشخص الذي يهتمون به هنا هو onClassification . تسمى هذه الطريقة بعد أن تم نسخ خطاب المستخدم بواسطة ASR وتصنيفه بواسطة NLU. يزود تطبيقك بنتيجة NLU ويطلب منك إعادة الرد:
override fun onClassification ( result : NLUResult ): VoicePrompt {
return if (result.intent == " your-special-intent " ) {
VoicePrompt ( " I hear you loud and clear " )
} else {
VoicePrompt (
" Sorry; I didn't catch that " ,
expectFollowup = true )
}
} تتيح المعلمة الثانية الاختيارية في مُنشئ VoicePrompt للدرج معرفة ما إذا كنت تتوقع استجابة - إذا كنت كذلك ، فستستأنف الاستماع النشط بعد تشغيل المطالبة حتى لا يتعين على المستخدم استخدام كلمة Wakeword أو زر لكل تفاعل.
ستجلبك العينة أعلاه وتشغيلها بأقل ضجة ، لكنها بعيدة عن كل ما تقدمه علبة المتحدثين. عندما تقوم ببناء مثيل TrayConfig ، يمكنك اختيار تكوين وتوفير منشئ Spokestack الأساسي نفسه. سيتيح لك ذلك القيام بأشياء مثل تغيير مزودي ASR ، وإعداد مستمعين مخصصين للأحداث من الأنظمة الفردية ، وإضافة مكونات معالجة الكلام المخصصة إذا كنت بحاجة إلى ذلك. يمكنك أن تقرأ عن منشور Spokestack Builder هنا.
هناك أيضًا مجموعة من الخيارات التي تنطبق على الدرج نفسه ، ويمكن الوصول إليها عبر طرق المساعد على مثيل TrayConfig.Builder . إن وصف كل واحد هنا سيجعل هذا القراءة ... رغم ذلك ، لذا تحقق من الوثائق لمزيد من التفاصيل. الوثائق على TrayConfig.Builder هي [هنا] (https://spokestack.github.io/spokestack-tray-droid/-pokestack-tray/io.spokestack.tray/-tray-config/-builder*.
يمكن تخصيص معظم جوانب واجهة المستخدم في الدرج. غالبًا ما يتم ذلك في XML عن طريق تجاوز القيم المحددة في المكتبة.
أحد الاستثناءات من ذلك هو اتجاه الدرج: زر الميكروفون الخاص به يتخلف عن الظهور كعلامة تبويب يواجه اليمين على الجانب اليسرى من الشاشة ، مع انزلاق الدرج من اليسار. كما يدعم اتجاه Righthand ولكنه يتطلب تغييرين من أجل القيام بذلك:
.orientation(TrayConfig.Orientation.RIGHT) على منشئ TrayConfig قبل بناء التكوين.< include
layout = " @layout/spokestack_tray_fragment "
android : layout_width = " wrap_content "
android : layout_height = " wrap_content "
app : layout_constraintBottom_toBottomOf = " parent "
app : layout_constraintEnd_toEndOf = " parent " /> نحتاج فقط إلى القيد الأخير هنا ؛ بقية السمات مطابقة لتخطيط المصدر. نظرًا لأننا include ، فإن تجاوز سمة واحدة يعني تجاوزها جميعًا ؛ انظر الملاحظة في نهاية الفقرة هنا.
يتم سرد التخصيصات واجهة المستخدم المستندة إلى القيمة أدناه. تشير أسماء الملفات هنا إلى التعريفات الأصلية في مجلد res/values للمكتبة ، ولكن يمكن تعريف البدائل في مكان آخر في مشروعك. يوضح تطبيق المثال هذا عن طريق تجاوز لون النص لرسائل النظام في res/values/custom_colors.xml .
colors.xmlspsk_colorTrayBg : لون الخلفية المستخدم في دفق رسالة الدرج.spsk_colorIcon : اللون الأمامي المستخدم في الرموز التي تحتاج إلى التباين مع spsk_colorBrand . الافتراضات إلى الأبيض.spsk_colorDragHandle : اللون المستخدم في مقبض السحب تغيير حجم الدرج.spsk_colorBrand : اللون الأساسي لعناصر واجهة المستخدم مثل زر الميكروفون والرموز دون خلفية.spsk_colorListenText : اللون المستخدم للنص في فقاعة "الاستماع".spsk_colorSystemText : اللون المستخدم للنص في فقاعات رسائل النظام.spsk_colorUserText : اللون المستخدم للنص في فقاعات رسائل المستخدم.spsk_colorSystemBg : لون الخلفية المستخدمة في فقاعات رسائل النظام.spsk_colorUserBg : لون الخلفية المستخدمة في فقاعات رسائل المستخدم.spsk_colorGradientOne : لون البداية المستخدمة في الرسوم المتحركة التدرج. الإعدادات الافتراضية إلى spsk_colorBrand .spsk_colorGradientEnd : اللون النهائي المستخدم في الرسوم المتحركة التدرج.spsk_colorTransparent : لون شفاف يستخدم كطملة الخلفية لسهم "الخلفي" على الدرج.dimens.xmlspsk_micTabWidth : عرض زر علامة التبويب الميكروفون. الإعدادات الافتراضية إلى 60dp .spsk_micTabHeight : ارتفاع زر علامة التبويب الميكروفون. الإعدادات الافتراضية إلى 80dp ويجب أن تبقى بنسبة 4: 3 مع spsk_micTabWidth .spsk_listenBubbleWidth : عرض فقاعة الاستماع التي تظهر خلال ASR. الإعدادات الافتراضية إلى 120dp وينبغي أن تبقى بنسبة 2: 1 مع spsk_listenBubbleHeight .spsk_listenBubbleHeight : ارتفاع لفقاعة الاستماع التي تظهر خلال ASR. الإعدادات الافتراضية إلى 60dp .spsk_messageStreamHeight : بدء ارتفاع دفق الرسائل داخل الدرج. الإعدادات الافتراضية إلى 100dp .spsk_messageStreamMinHeight : الحد الأدنى للارتفاع الذي يمكن تغيير حجم الدرج عن طريق السحب. الإعدادات الافتراضية إلى 80dp .ints.xmlspsk_trayAnimateMs : مقدار الوقت ، بالمللي ثانية ، يستغرق الدرج لفتح أو إغلاق. الإعدادات الافتراضية إلى 500 .strings.xmlspsk_listening : النص المعروض في الدرج أثناء الاستماع النشط (ASR). الإعدادات الافتراضية إلى "LISTENING" .styles.xmlspsk_messageFont : عائلة الخط المستخدمة لعرض نصوص ASR ورسائل النظام في الدرج. الإعدادات الافتراضية إلى sans-serif (Roboto). حقوق الطبع والنشر 2020 Spokestack ، Inc.
مرخصة بموجب ترخيص Apache ، الإصدار 2.0 ("الترخيص") ؛ لا يجوز لك استخدام هذا الملف إلا في الامتثال للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يكن مطلوبًا بموجب القانون المعمول به أو الموافقة على الكتابة ، يتم توزيع البرامج الموزعة بموجب الترخيص على أساس "كما هي" ، دون ضمانات أو شروط من أي نوع ، إما صريحة أو ضمنية. راجع ترخيص الأذونات والقيود التي تحكم اللغة المحددة بموجب الترخيص.