最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - "new NativeEventEmitter()` was called with a non-null argument.." warning TTS package - RN - Stac

programmeradmin0浏览0评论

I'm new to React native. In the application, the pronunciation of the words is heard with the TTS package. When I use this package, I get an warning as follows. This warning only happens on android. There is no problem on iOS. This warning ing as the app is opened. How can I fix this?

Warning:

TTS package settings:

import { Platform } from "react-native"
import Tts from "react-native-tts"

export class VocalizationUtil {
    constructor() {
        Tts.setDefaultLanguage("en-IE").catch(error => { })
    }

    iosConfig = {
        iosVoiceId: ".apple.ttsbundle.Moira-pact", //which voice to use
        rate: 0.5, //speech rate
    }

    androidConfig = {
        KEY_PARAM_PAN: 0,
        KEY_PARAM_VOLUME: 0.5, // 0 means silence
        KEY_PARAM_STREAM: "STREAM_MUSIC"
    }

    // Subscribe to TTS events
    createListeners() {
        Tts.addEventListener("tts-start", event => { })
        Tts.addEventListener("tts-finish", event => { })
        Tts.addEventListener("tts-cancel", event => { })
    }

    async voiceTheText(text) {

        this.createListeners()
        Tts.stop()  //Stop speaking and flush the TTS queue.

        // if text-to-speech engine is not installed, request the installation
        Tts.getInitStatus()
            .then(() => {
                Tts.speak(`${text}`, Platform.OS === "android" ? this.androidConfig : this.iosConfig)
            })
            .catch(error => { })

    }

}

I'm new to React native. In the application, the pronunciation of the words is heard with the TTS package. When I use this package, I get an warning as follows. This warning only happens on android. There is no problem on iOS. This warning ing as the app is opened. How can I fix this?

Warning:

TTS package settings:

import { Platform } from "react-native"
import Tts from "react-native-tts"

export class VocalizationUtil {
    constructor() {
        Tts.setDefaultLanguage("en-IE").catch(error => { })
    }

    iosConfig = {
        iosVoiceId: ".apple.ttsbundle.Moira-pact", //which voice to use
        rate: 0.5, //speech rate
    }

    androidConfig = {
        KEY_PARAM_PAN: 0,
        KEY_PARAM_VOLUME: 0.5, // 0 means silence
        KEY_PARAM_STREAM: "STREAM_MUSIC"
    }

    // Subscribe to TTS events
    createListeners() {
        Tts.addEventListener("tts-start", event => { })
        Tts.addEventListener("tts-finish", event => { })
        Tts.addEventListener("tts-cancel", event => { })
    }

    async voiceTheText(text) {

        this.createListeners()
        Tts.stop()  //Stop speaking and flush the TTS queue.

        // if text-to-speech engine is not installed, request the installation
        Tts.getInitStatus()
            .then(() => {
                Tts.speak(`${text}`, Platform.OS === "android" ? this.androidConfig : this.iosConfig)
            })
            .catch(error => { })

    }

}

Share Improve this question asked Nov 14, 2021 at 21:34 SoFSoF 7871 gold badge14 silver badges33 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 2

Thanks to @Langarus for the reply. I added the short solution here for those who encounter this problem.

For all packages where you get this warning, add the following code to the package's ..Module.java file. For example, for the TTS package, add the following code to node_modules/react-native-tts/android/src/main/java/net/no_mad/tts/TextToSpeechModule.java

   @ReactMethod
   public void addListener(String eventName) {
     // Keep: Required for RN built in Event Emitter Calls.
   }
   @ReactMethod
   public void removeListeners(Integer count) {
     // Keep: Required for RN built in Event Emitter Calls.
   }

  1. In case you are using removeEventListener, that was deprecated https://reactnative.dev/docs/appstate#removeeventlistener You have a codeSnippet on the top of the page on how to use .remove() instead of removeEventLister

  2. In case you are using react-native-reanimated or drawer it seems that the problem es from the libraries not being updated. https://github./react-navigation/react-navigation/issues/9882

If you want to silence it new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论