Как вернуть перекодированный звук из sphinx4 - PullRequest
0 голосов
/ 30 октября 2018

Привет. Я пытаюсь получить аудиофайл из sphinx4, есть ли способ сохранить аудиофайл на локальный компьютер? Давайте посмотрим, что пользователь скажет: «ОК, sphinx, скажи мне время». Мне нужно сохранить аудиофайл, содержащий синтаксис «ОК, sphinx4, скажи мне время», чтобы я мог использовать этот аудиофайл для других целей.

1 Ответ

0 голосов
/ 02 ноября 2018

Так вы можете получить аудио файл из декодера.

    recognizer = SpeechRecognizerSetup.defaultSetup()
            .setAcousticModel(new File(assetsDir, "en-us-ptm"))
            .setDictionary(new File(assetsDir, "cmudict-en-us.dict"))
            .getRecognizer();

    recognizer.addListener(mRecognitionListener);
    recognizer.getDecoder().setRawdataSize(300000);// don't forget to set size

    recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);


}

и затем внутри вашего обратного вызова onResult

@override
public void onResult(Hypothesis hypothesis) {
Log.d(TAG, "onResult: " + + recognizer.getDecoder().getRawdata().length);

        if (hypothesis != null) {
            String text = hypothesis.getHypstr();
        }
      Decoder decoder= recognizer.getDecoder();
        short[] data = decoder.getRawdata();
        try {
            DataOutputStream dos = new DataOutputStream(new FileOutputStream(Utils.getPublicStorageDir("recoding",".raw")));
            for (int i = 0; i < data.length; i++) {
                dos.writeShort(data[i]);
            }
            dos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

И вы можете воспроизводить этот звук

   public static void playAudioFromRaw(short[] data){
        int bufsize = AudioTrack.getMinBufferSize(
                8000,
                AudioFormat.CHANNEL_IN_STEREO,
                AudioFormat.ENCODING_PCM_16BIT
        );
        AudioTrack trackplayer = new AudioTrack(
                AudioManager.STREAM_MUSIC, 8000,
                AudioFormat.CHANNEL_IN_STEREO,
                AudioFormat.ENCODING_PCM_16BIT,
                bufsize,
                AudioTrack.MODE_STREAM
        );
        trackplayer.play();
        trackplayer.write(data, 0, data.length);
        trackplayer.stop();
        trackplayer.release();
    }
...