2017-04-25 117 views
2

我試圖使用JSON和下面的代碼片段發送POST請求到https://speech.googleapis.com/v1/speech:recognize。不知何故,谷歌迴應說,在我的請求中無法解碼Base 64。Google語音API的Base64解碼失敗

{ 「配置」:{ 「編碼」: 「LINEAR16」, 「sampleRateHertz」:16000, 「語言代碼」: 「JA-JP」, 「maxAlternatives」:5, 「profanityFilter」:假 }, 「音頻」:{ 「內容」: 「ZXCVBNM」 }, }

String pcmFilePath = "/storage/emulated/0/Download/voice8K16bitmono.pcm"; 
    File rawFile = new File(pcmFilePath); 
    byte[] rawData = new byte[(int) rawFile.length()]; 
    DataInputStream input = null; 
    try { 
     input = new DataInputStream(new FileInputStream(rawFile)); 
     int readResult = input.read(rawData); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    if (input != null) { 
     input.close(); 
    }; 

    String base64 = Base64.encodeToString(rawData, Base64.DEFAULT); 
    String completePostBody = postBody.replace("ZXCVBNM" , base64); 

「代碼」:400, 「消息」:「在 'audio.content' 的值無效(TYPE_BYTE S),Base64解碼失敗,因爲「...

有沒有人有任何建議?

+0

本質上,它在消息中所說的。 'ZXCVBNM'無效(不完整)base64編碼(部分解碼爲'epò',但不完整)。 Base-64將源(二進制)數據的每三個字符編碼爲4個編碼數據字符。您只有七個字符,因此不完整(並且對於任何類型的音頻表示也是可疑的短)。 – TripeHound

+0

我後來意識到,你正在用你的文件內容替換'ZXCVBNM'(我不知道Android足以知道你的代碼是否正確讀取文件)。然而,問題仍然是谷歌收到的是不是有效的base-64。嘗試記錄你實際發送的有效載荷中是否有意義。 (或者,可以想象,Googole並不期待base64(鏈接給我404)。 – TripeHound

+0

對於遲到的回覆,我發送POST請求後跟隨此文檔:https://cloud.google.com/speech/reference/rest/v1/speech/recognition。可能是你想要訪問的鏈接不是用於瀏覽器的,下面是我實際發送的有效負載的日誌記錄:http://www.mediafire.com/file/9qzxyzexlxc7jr1/ – ZodiacLeo123

回答

3

我設法從Google Speech API得到結果。

據記載,該基地64編碼不應該有換行 鏈接:https://cloud.google.com/speech/docs/base64-encoding

改變從Base64.DEFAULTBase64.NO_WRAP在我的情況下工作。 此外pcm文件應該是LSB

+2

這是有道理的(一旦你意識到這一點),雖然你鏈接不作要求明顯(這只是真正在Linux例子中提到)的文檔,我懷疑使用'encodeToString()'(這似乎是一個合理事情),而不是一個'字節[]'因爲他們在自己的Java例子做的是問題的一部分 - 它的默認顯然是行包,大概是包含在電子郵件或類似 – TripeHound

+0

@ ZodiacLeo123可以。你詳細說明了你的答案嗎?我也遇到了這個問題。你是什麼意思「不應該有換行鏈接「。我注意到,在我的base64有一些符號一樣,'「+」','「=」','「\ n''和'」 /''。這是問題嗎?並且所有文件都應該用LSB編碼? – hamdanjz4

+0

「不應該有換行鏈接」是從Google文檔引用的句子。實際上,我使用Android Studio中的庫來爲我完成base 64編碼。幸運的是,只有一個設置,它的工作。如果你打算手動編碼,我想我不能幫你。而關於LSB,如果您的pcm文件使用MSB編碼,Google將返回空json響應。 – ZodiacLeo123