2011-08-08 80 views
12

正如您可能知道的那樣,使用Android API實現語音到文本很容易。你所要做的只是調用API的意圖,它會爲你返回文本。我的情況有點不同,我有一個預先記錄的3GPP聲音文件,我從用戶那裏記錄下來並保存在SD卡上。我想知道是否有可能將其轉錄成任何其他語音識別的文本。語音到文本API是否允許上傳您自己的聲音文件進行處理?或者這是不可能的?從自己的聲音文件到文本的語音

回答

3

的API不允許這樣做,但看到this blog post and its comments一個潛在的解決方法。另外請確保您的文件包含高質量音頻(至少16位和16 kHz)以獲得更好的轉錄。

參見:

+0

嗯,該文章確實證明它發送一個聲音文件到服務器,並等待JSON回來。所以我想你需要在客戶端做的所有事情都是將3GPP文件轉換成FLAC併發布到服務器。希望這很簡單。 :) – Brian

+0

它是否幫助你??因爲我做你以前所做的一樣.. –

+0

這個解決方法的答案不再是功能。它依賴Google Speech v1 API,目前Google已經關閉了它。根據我的經驗,語音v2 API需要一個密鑰,並且根據我的經驗,它變得無法預測(我認爲應用程序每天可以做出的外部請求數量是有限的) –

2

我得到了工作井有言論從聲音文件爲文本的解決方案。下面是我創建的一個簡單的Android項目link,以顯示解決方案的工作。另外,我在項目中放置了一些打印屏幕來說明應用程序。

我會盡量簡單地解釋我使用的方法。我在該項目中結合了兩個功能:Google Speech API和Flac錄製。

Google Speech API通過HTTP連接調用。 Mike Pultz給出了關於API的更多詳細信息:

「(...)新的[Google] API是一個全雙工流式API,這意味着它實際上使用兩個HTTP連接 - 一個POST請求上傳作爲「實時」分塊流的內容,以及訪問結果的第二個GET請求,這對於較長的音頻採樣或流式音頻更爲合理。「

然而,這個API需要接收FLAC聲音文件才能正常工作。這使得我們去第二部分:拉克記錄

我實現拉克記錄在該項目中,通過提取和來自被稱爲AudioBoo一個開源應用程序適應的代碼和庫的一些作品。 AudioBoo使用本地代碼來記錄和播放flac格式。

因此,它可以記錄一個後手的聲音,將其發送給谷歌語音API,獲取文本,並播放剛錄製的聲音。

我創造了該項目的基本原則,使其工作,可以針對具體情況加以改進。爲了使它在不同的場景下工作,有必要獲得Google Speech API密鑰,該密鑰由Google Chromium-dev組的一部分獲得。我在該項目中留下了一把鑰匙,以顯示它正在工作,但我最終會將其刪除。如果有人需要更多關於它的信息,讓我知道原因,我不能在這篇文章中添加2個以上的鏈接。

+0

我安裝了NDK,修復了很多路徑和導入,但是您建議的項目不起作用。我不會因爲整個事情現在可能會被棄用而退縮... – Josh

0

這是目前無法發送自己的音頻文件,以谷歌的處理,而是你可以使用你的揚聲器和麥克風在你的Android設備上使用您的音頻文件作爲輸入到谷歌語音識別。

首先,你必須有這可能是你的SD卡,然後使用以下步驟的音頻文件:

1)創建任何名稱的方法,你想

2)方法首先寫的代碼中對於使用谷歌語音識別

3)下面的代碼編寫的代碼使用揚聲器播放音頻文件,那麼這將成爲作爲輸入到谷歌語音識別

//code for google voice recognition 
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
         RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
         getString(R.string.speech_prompt)); 
try { 
     startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
} catch (ActivityNotFoundException a) { 
Toast.makeText(getApplicationContext(), 
          getString(R.string.speech_not_supported), 
          Toast.LENGTH_SHORT).show(); 

//code for playing the audio file which you wish to give as an input 
    MediaPlayer mp = new MediaPlayer(); 
    try { 
    mp.setDataSource(file); // here file is the location of the audio file you wish to use an input 
     mp.prepare(); 
     mp.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

僅供參考,請參閱我的博客 https://sureshkumarask.wordpress.com/2017/03/19/how-to-give-our-own-audio-file-as-an-input-to-any-speech-recognizer/

我已經在我的博客中附上了java文件的鏈接。

+1

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。如果鏈接的頁面發生變化,僅鏈接的答案可能會失效 – slfan

+0

對不起,我已經解釋清楚並提供鏈接。感謝您的評論.. – SuKu