Я интегрировал 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());
}