我正在努力让转录在我的Android应用程序上使用IBM语音到文本服务。下面是用于记录文件和转录文件的代码。
示例代码我从this
获取了watson媒体记录器输出
mediaRecorder = new MediaRecorder();
mediaRecorder.setMaxDuration(MAX_DURATION);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
我收听时文件确实有清晰的音频。
Watson代码
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是因为文档说:audio / 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上找到的带有Watson语音文本的例子。
答案 0 :(得分:1)
我之所以选择Audio_OGG是因为文档说:audio / ogg(该服务会自动检测输入音频的编解码器。)
该服务可以自动检测ogg文件是否包含vorbis或opus音频;但这对于mp4输入不起作用。
看起来MediaRecorder不支持ogg输出,但您可以尝试切换到webm,然后使用mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.WEBM);
中的HttpMediaType.AUDIO_WEBM
,然后使用RecognizeOptions
。
Watson也支持HttpMediaType.AUDIO_MPEG
,但我并不认为它与MediaRecorder的MPEG_4
相同。