Прочитайте ввод из аудио / текстового файла и установите его в v1alpha1 помощник Google как ConverseRequest в Android - PullRequest
0 голосов
/ 21 мая 2019

Я интегрировал Google Assistant v1 alpha1 SDK с android, и он отвечает, как и ожидалось, при вводе живого голосового ввода, но я хочу, чтобы он мог читать пользовательский ввод с text/audio file, а затем отвечать,

Я предполагаю, что ввод аудиофайла в Converserequest может быть дан с использованием android.media.AudioTrack, но не уверен как.Есть ли другой способ добиться этого?Я видел различные примеры, чтобы сделать это в v1alpha1 с использованием Python, но не нашел ни одного примера для Java.: (

Или есть способ нажать параметр запроса между ними и явно изменить его?

По сути, он должен иметь возможность читать отдельные аудиофайлы из папки устройства Android как отдельные входы идать соответствующие устные ответы. Пожалуйста, помогите !!!

* Редактировать * Я попытался явно записать аудиовход в моей речевой службе, как показано ниже, но выдает следующую ошибку:

 E/SpeechService: converse response error: # com.google.rpc.Status@4e11a0f7
    code: 3
    message: "Invalid \'audio_in\': audio frame length is too long."
E/SpeechService: converse error:
    io.grpc.StatusRuntimeException: INVALID_ARGUMENT: Invalid 'audio_in': audio frame length is too long.

Мой код:

public void recognize(byte[] data, int size) {

//        if (mRequestObserver == null) {
//            return;
//        }

    File file=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/sounds/tmpaudio.wav");

    InputStream is;
    DataInputStream         dis = null ;
    BufferedInputStream     bis;

    try
    {
        is = new FileInputStream(file);
        bis = new BufferedInputStream(is, 8000);
        dis  = new DataInputStream(bis);      //  Create a DataInputStream to read the audio data from the saved file

    }
    catch (FileNotFoundException e1)
    {

    }

int i = 0;                                                          //  Read the file into the "music" array
byte[] music=new byte[(int) file.length()];
try
    {
        while (dis.available() > 0)
        {
            music[i] = dis.readByte();                                      //  This assignment does not reverse the order
            i++;
        }
    }
    catch (IOException e)
    {

    }

    try {dis.close();} catch (IOException e) {e.printStackTrace();}

    data = music;

//        String test = "Hello World";
//        data = test.getBytes();
        size = data.length;
    // Call the streaming recognition API
    mRequestObserver.onNext(ConverseRequest.newBuilder()
            .setAudioIn(ByteString.copyFrom(data, 0, size))
            .build());

}
...