Search code examples
javascriptreact-nativetext-to-speech

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


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 coming as the app is opened. How can I fix this?

Warning:

enter image description here

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: "com.apple.ttsbundle.Moira-compact", //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 => { })

    }

}


Solution

  • 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.
       }