2017-10-20 269 views
2

我在使用IBM語音轉文本服務獲取轉錄以在我的android應用程序上工作而苦苦掙扎。以下是記錄文件和轉錄文件的代碼。ibm watson對文本轉錄問題的語音轉換問題

示例代碼我把沃森從github link

媒體記錄輸出

mediaRecorder = new MediaRecorder(); 
mediaRecorder.setMaxDuration(MAX_DURATION); 
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

文件不具有清晰的聲音,當我聽。

沃森代碼

private void startWatson() { 

    service = new SpeechToText(); 
    String userName = String.valueOf(R.string.speech_text_username); 
    String password = String.valueOf(R.string.speech_text_password); 
    service.setUsernameAndPassword(userName, password); 
    service.setEndPoint(String.valueOf(R.string.speech_text_url)); 
} 

我從我的bluemix帳戶的用戶名,密碼和網址。

private void transcribe() throws IOException { 

    final InputStream inputStream = FileUtils.openInputStream(files[spnRecordingList.getSelectedItemPosition()]); 
    recognizeOptions = new RecognizeOptions.Builder().contentType(HttpMediaType.AUDIO_OGG).interimResults(true).build(); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       service.recognizeUsingWebSocket(inputStream, recognizeOptions, new playback()); 
      } catch (Exception e) { 

      } 
     } 
    }).start(); 

} 

我選擇Audio_OGG因爲文件說:音頻/ OGG(該服務自動檢測輸入音頻的編解碼器。)

這可能是錯了,所以如果是這樣,請解釋爲什麼,因爲例子我發現沒有那麼多的幫助。

播放類

private class playback extends BaseRecognizeCallback { 

    @Override 
    public void onTranscription(SpeechResults speechResults) { 
     if (speechResults.getResults() != null && !speechResults.getResults().isEmpty()) { 
      String text = speechResults.getResults().get(0).getAlternatives().get(0).getTranscript(); 
      txtbox.setText(text); 
     } 
    } 

    @Override 
    public void onError(Exception e) { 
     txtbox.setText("on error"); 
    } 

    @Override 
    public void onDisconnected() { 
     txtbox.setText("on disconnected"); 

    } 
} 

播放類是我的活動類中的一類

public class RecordingActivity extends AppCompatActivity implements 
RecordingListFragment.OnFragmentInteractionListener { 

"on create and etc code" 
"start watson function" 
"transcribe function" 
playback class {} 
} 

我接過類和線程代碼的形式我在GitHub上發現沃森語音到文本的例子。

回答

1

我選擇Audio_OGG因爲文檔說:音頻/ OGG(該服務自動檢測輸入音頻的編解碼器。)

該服務可以自動檢測OGG文件是否包含Vorbis格式或OPUS音頻;但這不適用於mp4輸入。

它看起來並不像MediaRecorder支持OGG格式輸出,但你可以嘗試做mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.WEBM);然後在RecognizeOptions使用HttpMediaType.AUDIO_WEBM切換到WEBM。

Watson也支持HttpMediaType.AUDIO_MPEG,雖然我不認爲它與MediaRecorder的MPEG_4相同。

還有幾個工作示例https://github.com/watson-developer-cloud/java-sdk/tree/develop/examples/src/main/java/com/ibm/watson/developer_cloud/speech_to_text/v1

+0

嗨內森,謝謝你的提示。我也發現了我的一個問題。啓動watson需要getApplicationContext()。getResources()。getString(R.string.speech_text_username); – lostknight