مكتبة تحويل الكلام إلى نص لـ React Native.
أضف الغزل @react-native-voice/voice# ornpm i @react-native-voice/voice --حفظ
ربط حزمة iOS
تثبيت جراب npx
الربط
ربط Android يدويًا
ربط iOS يدويًا
البرنامج المساعد للبناء المسبق
الاستخدام
مثال
واجهة برمجة التطبيقات
الأحداث
الأذونات
أندرويد
دائرة الرقابة الداخلية
المساهمين
قم بربط NativeModule يدويًا أو تلقائيًا
رابط رد الفعل الأصلي @react-native-voice/voice
في android/setting.gradle
... include ':@react-native-voice_voice', ':app'project(':@react-native-voice_voice').projectDir = ملف جديد (rootProject.projectDir, '../node_modules/@react-native-voice/ صوت/أندرويد')
في android/app/build.gradle
...التبعيات {... ترجمة المشروع (':@react-native-voice_voice') }
في MainApplication.java
import android.app.Application;import com.facebook.react.ReactApplication;import com.facebook.react.ReactPackage; ...import com.wenkesj.voice.VoicePackage; // <------ أضف هذا!... public class MainActivity Extends Activity ideas ReactApplication { ...@Overrideprotected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList(new MainReactPackage(),new VoicePackage() // <------ أضف هذا!); } }
اسحب Voice.xcodeproj من المجلد @react-native-voice/voice/ios إلى مجموعة Libraries على Xcode في مشروعك. الربط اليدوي
انقر فوق ملف مشروعك الرئيسي (الملف الذي يمثل .xcodeproj) وحدد مراحل البناء واسحب المكتبة الثابتة، lib.Voice.a، من المجلد Libraries/Voice.xcodeproj/Products لربط الملف الثنائي بالمكتبات
لا يمكن استخدام هذه الحزمة في تطبيق "Expo Go" لأنها تتطلب رمزًا أصليًا مخصصًا.
بعد تثبيت حزمة npm هذه، أضف مكون التهيئة الإضافي إلى مصفوفة plugins
الخاصة بـ app.json
أو app.config.js
:
{ "expo": {"المكونات الإضافية": ["@react-native-voice/voice"] } }
بعد ذلك، أعد إنشاء تطبيقك كما هو موضح في دليل "إضافة رمز أصلي مخصص".
يوفر البرنامج المساعد الدعائم لمزيد من التخصيص. في كل مرة تقوم فيها بتغيير الدعائم أو المكونات الإضافية، ستحتاج إلى إعادة بناء (وإنشاء prebuild
) التطبيق الأصلي. إذا لم تتم إضافة أي خصائص إضافية، فسيتم استخدام الإعدادات الافتراضية.
speechRecognition
( سلسلة | خطأ ): يضبط الرسالة لمفتاح NSSpeechRecognitionUsageDescription
في رسالة Info.plist
. عندما يكون غير محدد، سيتم استخدام رسالة الإذن الافتراضية. عندما يكون false
، سيتم تخطي الإذن.
microphone
( سلسلة | خطأ ): يضبط الرسالة لمفتاح NSMicrophoneUsageDescription
في Info.plist
. عندما يكون غير محدد، سيتم استخدام رسالة الإذن الافتراضية. عندما تكون false
، لن تتم إضافة android.permission.RECORD_AUDIO
إلى AndroidManifest.xml
وسيتم تخطي إذن iOS.
{ "الإضافات": [ [ "@react-native-صوت/صوت"، {"microphonePermission": "CUSTOM: السماح لـ $(PRODUCT_NAME) بالوصول إلى الميكروفون"، "speechRecognitionPermission": "CUSTOM: السماح لـ $(PRODUCT_NAME) بالتعرف على كلام المستخدم بشكل آمن" } ] ] }
مثال كامل لنظامي التشغيل Android وiOS.
استيراد الصوت من '@react-native-voice/voice'؛ استيراد React، {Component} من 'react'؛ فئة VoiceTest توسع المكون { مُنشئ (الدعائم) {Voice.onSpeechStart = this.onSpeechStartHandler.bind(this);Voice.onSpeechEnd = this.onSpeechEndHandler.bind(this);Voice.onSpeechResults = this.onSpeechResultsHandler.bind(this); } onStartButtonPress(e){Voice.start('en-US'); } ...}
الوصول الثابت إلى Voice API.
تُرجع جميع الطرق الآن new Promise
بالتوافق async/await
.
اسم الطريقة | وصف | منصة |
---|---|---|
Voice.isAvailable() | التحقق من توفر خدمة التعرف على الكلام على النظام. | أندرويد، آي أو إس |
Voice.start(اللغة المحلية) | يبدأ الاستماع للكلام في لغة معينة. إرجاع فارغة إذا لم يحدث أي خطأ. | أندرويد، آي أو إس |
صوت.توقف() | يتوقف عن الاستماع للكلام. إرجاع فارغة إذا لم يحدث أي خطأ. | أندرويد، آي أو إس |
إلغاء الصوت () | يلغي التعرف على الكلام. إرجاع فارغة إذا لم يحدث أي خطأ. | أندرويد، آي أو إس |
صوت.تدمير() | يدمر مثيل SpeechRecognizer الحالي. إرجاع فارغة إذا لم يحدث أي خطأ. | أندرويد، آي أو إس |
Voice.removeAllListeners() | ينظف/يلغي طرق Voice الثابتة التي تم تجاوزها. | أندرويد، آي أو إس |
Voice.isRecognizing() | قم بالرجوع إذا تم التعرف على SpeechRecognizer. | أندرويد، آي أو إس |
Voice.getSpeechRecognitionServices() | إرجاع قائمة بمحركات التعرف على الكلام المتوفرة على الجهاز. (مثال: ['com.google.android.googlequicksearchbox'] إذا كان Google هو الوحيد المتاح.) | أندرويد |
عمليات الاسترجاعات التي يتم استدعاؤها عندما ينبعث حدث أصلي.
اسم الحدث | وصف | حدث | منصة |
---|---|---|---|
Voice.onSpeechStart (الحدث) | يتم استدعاؤه عندما يتم استدعاء .start() بدون خطأ. | { error: false } | أندرويد، آي أو إس |
Voice.onSpeechRecognized (حدث) | يتم استدعاؤه عند التعرف على الكلام. | { error: false } | أندرويد، آي أو إس |
Voice.onSpeechEnd (الحدث) | يتم استدعاؤه عندما يتوقف SpeechRecognizer عن التعرف. | { error: false } | أندرويد، آي أو إس |
Voice.onSpeechError (الحدث) | يتم استدعاؤه عند حدوث خطأ. | { error: Description of error as string } | أندرويد، آي أو إس |
Voice.onSpeechResults (الحدث) | يتم استدعاؤه عند الانتهاء من التعرف على SpeechRecognizer. | { value: [..., 'Speech recognized'] } | أندرويد، آي أو إس |
Voice.onSpeechPartialResults(الحدث) | يتم استدعاؤه عند حساب أية نتائج. | { value: [..., 'Partial speech recognized'] } | أندرويد، آي أو إس |
Voice.onSpeechVolumeChanged(الحدث) | يتم استدعاؤه عند تغيير درجة الصوت التي تم التعرف عليها. | { value: pitch in dB } | أندرويد |
يمكن القول أن الجزء الأكثر أهمية.
على الرغم من أن تطبيق VoiceTest
المضمن يعمل بدون عمليات فحص وطلبات صريحة للأذونات، فقد يكون من الضروري إضافة طلب إذن لـ RECORD_AUDIO
لبعض التكوينات. منذ Android M (6.0)، يحتاج المستخدم إلى منح الإذن في وقت التشغيل (وليس أثناء تثبيت التطبيق). افتراضيًا، سيؤدي استدعاء الأسلوب startSpeech
إلى استدعاء النافذة المنبثقة لإذن RECORD AUDIO
للمستخدم. يمكن تعطيل هذا عن طريق تمرير REQUEST_PERMISSIONS_AUTO: true
في وسيطة الخيارات.
إذا كنت تقوم بتشغيل تطبيق expo/expokit تم إخراجه، فقد تواجه مشكلات تتعلق بالأذونات على Android وتحصل على الخطأ التالي host.exp.exponent.MainActivity cannot be cast to com.facebook.react.ReactActivity startSpeech
. يمكن حل هذه المشكلة عن طريق المطالبة بالإذن باستخدام حزمة expo-permission
قبل بدء التعرف.
import { Permissions } from "expo";async ComponDidMount() {const { الحالة، انتهاء الصلاحية، الأذونات } = انتظار Permissions.askAsync(Permissions.AUDIO_RECORDING);if (الحالة !== "منحة") {// لم يتم منح الأذونات. لا تظهر زر بدء التسجيل لأنه سيؤدي إلى مشاكل إذا تم الضغط عليه.this.setState({showRecordButton: false});} else {this.setState({showRecordButton: true});}}
ملاحظات على الروبوت
حتى بعد أن تكون جميع الأذونات صحيحة في Android، هناك شيء أخير للتأكد من أن libray يعمل بشكل جيد على Android. يرجى التأكد من أن الجهاز يحتوي على محرك Google للتعرف على الكلام مثل com.google.android.googlequicksearchbox
عن طريق الاتصال بـ Voice.getSpeechRecognitionServices()
. نظرًا لأنه يمكن تكوين هواتف Android بالعديد من الخيارات، حتى إذا كان الجهاز يحتوي على محرك googlequicksearchbox، فيمكن تهيئته لاستخدام خدمات أخرى. يمكنك التحقق من الخدمة المستخدمة لتطبيق Voice Assistive من خلال الخطوات التالية لمعظم هواتف Android:
Settings > App Management > Default App > Assistive App and Voice Input > Assistive App
يمكن أن يختلف التدفق أعلاه اعتمادًا على طرازات Android والشركات المصنعة. بالنسبة لهواتف Huawei، قد يكون هناك احتمال ألا يتمكن الجهاز من تثبيت خدمات Google.
كيف يمكنني الحصول على com.google.android.googlequicksearchbox
في الجهاز؟
يرجى مطالبة المستخدمين بتثبيت تطبيق بحث Google.
تحتاج إلى تضمين أذونات NSMicrophoneUsageDescription
و NSSpeechRecognitionUsageDescription
داخل Info.plist لنظام التشغيل iOS. راجع VoiceTest
المتضمن لمعرفة كيفية التعامل مع هذه الحالات.
<ديكت> ... <key>NSMicrophoneUsageDescription</key> <string>وصف لسبب مطالبتك باستخدام الميكروفون</string> <key>NSSpeechRecognitionUsageDescription</key> <string>وصف سبب مطالبتك باستخدام ميزة التعرف على الكلام</string> ... </ديك>
يرجى الاطلاع على الوثائق المقدمة من ReactNative لهذا: PermissionsAndroid
@asafron
@بريندانFDMoore
@برودني
@chitezh
@ifsnow
@jamsch
@ميسينو
@نويتيدارت
@ohtangza و @hayanmind
@rudiedev6
@tdonia
@وينكيسج