Has anyone seen this error? Know how to fix it? Please help me.
I am using the IBM Watson speech to text library, and trying to make it record the voice when button pressed, and stop record when button released.
I have read the code sample given, but I get this error:
java.lang.NoClassDefFoundError: com.ibm.watson.developer_cloud.android.library.audio.opus.JNAOpus
fragment where i record the voice
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.ibm.watson.developer_cloud.android.library.audio.MicrophoneInputStream;
import com.ibm.watson.developer_cloud.android.library.audio.utils.ContentType;
import com.ibm.watson.developer_cloud.speech_to_text.v1.SpeechToText;
import com.ibm.watson.developer_cloud.speech_to_text.v1.model.RecognizeOptions;
import com.ibm.watson.developer_cloud.speech_to_text.v1.model.SpeechResults;
import com.ibm.watson.developer_cloud.speech_to_text.v1.websocket.BaseRecognizeCallback;
import com.zainalfahrudin.noteapp.R;
import java.io.IOException;
import java.io.InputStream;
public class AddNoteSpeechFragment extends Fragment {
private ImageView ivRecord;
private RelativeLayout viewBg;
private Button button;
private SpeechToText speechService;
private InputStream myInputStream;
private RecognizeOptions options;
private TextView tvResult;
private ProgressBar progress;
private boolean isRecording;
private String TAG = getClass().getSimpleName();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.add_speech_layout, container, false);
ivRecord = (ImageView) view.findViewById(R.id.ivRecord);
viewBg = (RelativeLayout) view.findViewById(R.id.rvBgRecord);
button = (Button) view.findViewById(R.id.btnSubmit);
tvResult = (TextView) view.findViewById(R.id.tvVoiceResult);
progress = (ProgressBar) view.findViewById(R.id.progressRecord);
return view;
}
public static AddNoteSpeechFragment newInstance(Bundle args) {
AddNoteSpeechFragment fr = new AddNoteSpeechFragment();
fr.setArguments(args);
return fr;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
speechService = new SpeechToText();
speechService.setUsernameAndPassword("60b15d7e-84c3-4a35-b3c4-dc50ddf9d445", "4ugHjjouy5TH");
System.out.println(speechService.getModels());
options = new RecognizeOptions.Builder()
.continuous(true)
.interimResults(true)
.model("en-US_BroadbandMode1")
.contentType(ContentType.OPUS.toString())
.inactivityTimeout(2000)
.build();
viewBg.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//pressed
myInputStream = new MicrophoneInputStream();
ivRecord.setImageDrawable(getResources().getDrawable(R.drawable.ic_mic_black_48dp));
progress.setVisibility(View.VISIBLE);
new Thread(new Runnable() {
@Override
public void run() {
if (!isRecording) {
isRecording = true;
translateVoice();
} else {
Log.d(getTag(), "run: has recording ...");
}
}
});
Log.d(TAG, "onTouch: isrecording = " + isRecording);
break;
case MotionEvent.ACTION_UP:
progress.setVisibility(View.INVISIBLE);
ivRecord.setImageDrawable(getResources().getDrawable(R.drawable.ic_mic_none_black_48dp));
isRecording = false;
Log.d(TAG, "onTouch: isrecording = " + isRecording);
try {
myInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
v.onTouchEvent(event);
return true;
}
});
}
private void translateVoice() {
Log.d(TAG, "translateVoice: run!");
try {
speechService.recognizeUsingWebSocket(myInputStream,
options, new BaseRecognizeCallback() {
@Override
public void onTranscription(SpeechResults speechResults) {
String text = speechResults.getResults().get(0).getAlternatives().get(0).getTranscript();
System.out.println(text);
tvResult.setText(text);
}
@Override
public void onError(Exception e) {
showSnackBar(e.getMessage());
}
@Override
public void onDisconnected() {
showSnackBar("disconected");
}
});
} catch (Exception e) {
e.printStackTrace();
showSnackBar(e.getMessage());
}
}
private void showSnackBar(String message) {
Snackbar.make(button, message, Snackbar.LENGTH_SHORT).show();
}
}
gradle
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'core-release', ext: 'aar')
//compile project(path: ':core')
compile(name: 'cloudant', ext: 'aar')
//compile project(path: ':cloudant')
compile 'com.cloudant:cloudant-sync-datastore-android:0.15.5'
compile 'com.android.support:multidex:1.0.1'
//compile project(path: ':analytics')
compile(name: 'analytics-release', ext: 'aar')
compile(
"com.android.support:support-v4:$supportLibraryVersion",
"com.android.support:gridlayout-v7:$supportLibraryVersion",
"com.android.support:appcompat-v7:$supportLibraryVersion",
"com.android.support:cardview-v7:$supportLibraryVersion",
"com.android.support:design:$supportLibraryVersion"
)
// transitive dependencies are not pulled from local .aar, so we must include all of them:
compile 'com.squareup.okhttp:okhttp:2.5.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.doomonafireball.betterpickers:library:1.6.0'
compile 'com.ibm.watson.developer_cloud:text-to-speech:3.5.1'
compile 'com.ibm.watson.developer_cloud:speech-to-text:3.5.2'
compile 'com.ibm.watson.developer_cloud:language-translator:3.5.2'
compile project(':android-sdk-0.2.1-aar-with-dependencies')
}
logcat
09:34:56.876 8480-8714/zainalfahrudin.noteapp E/AndroidRuntime: FATAL EXCEPTION: Thread-780
Process: zainalfahrudin.noteapp, PID: 8480
java.lang.NoClassDefFoundError: com.ibm.watson.developer_cloud.android.library.audio.opus.JNAOpus
at com.ibm.watson.developer_cloud.android.library.audio.opus.OggOpusEnc.initEncoder(OggOpusEnc.java:64)
at com.ibm.watson.developer_cloud.android.library.audio.opus.OggOpusEnc.<init>(OggOpusEnc.java:43)
at com.ibm.watson.developer_cloud.android.library.audio.MicrophoneCaptureThread.run(MicrophoneCaptureThread.java:66)