android - 使用 IBM Watson Android sdk 将音频文件写入 websocket

标签 android websocket speech-to-text ibm-watson

在浏览 IBM 开发者论坛中的一篇文章后,我意识到 Android sdk 从麦克风录音中读取字节并将其写入 Websocket。我现在尝试从内存中的音频文件读取字节并将它们写入 websocket。我该怎么做?到目前为止我已经:

public class AudioCaptureThread extends Thread{

private static final String TAG = "AudioCaptureThread";
private boolean mStop = false;
private boolean mStopped = false;
private int mSamplingRate = -1;
private IAudioConsumer mIAudioConsumer = null;

// the thread receives high priority because it needs to do real time audio capture
// THREAD_PRIORITY_URGENT_AUDIO = "Standard priority of the most important audio threads"
public AudioCaptureThread(int iSamplingRate, IAudioConsumer IAudioConsumer) {
    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
    mSamplingRate = iSamplingRate;
    mIAudioConsumer = IAudioConsumer;
}

// once the thread is started it runs nonstop until it is stopped from the outside
@Override
public void run() {

    File path = Activity.getContext.getExternalFilesDir(null);
    File file = new File (path, "whatstheweatherlike.wav");
    int length = (int) file.length();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] b = new byte[length];
    FileInputStream in = null;
    try {
        in = new FileInputStream(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    try {
        for (int readNum; (readNum = in.read(b)) != -1;) {
            bos.write(b, 0, readNum);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    byte[] bytes = bos.toByteArray();
    mIAudioConsumer.consume(bytes);
}

但是,Activity.getContext 无法识别。我可以在 MainActivity 中将文件转换为字节,但是如何将其写入 websocket?我走在正确的道路上还是这不是正确的方法?如果是,我该如何解决这个问题?

感谢任何帮助!

最佳答案

Activity.getContext 无法识别,因为没有对 Activity 的引用,因为它只是一个 Thread。您必须传入 Activity,尽管如果您需要的话,传入 Context 可能更有意义。

您的想法是正确的,您可以创建一个 FileInputStream 并使用它。您可能想使用我们的 MicrophoneCaptureThread 作为引用。这将是一个非常相似的情况,只不过您将使用 FileInputStream 而不是从麦克风读取。您可以在此处查看它(以及使用它的示例项目):https://github.com/watson-developer-cloud/android-sdk/blob/master/library/src/main/java/com/ibm/watson/developer_cloud/android/library/audio/MicrophoneCaptureThread.java

关于android - 使用 IBM Watson Android sdk 将音频文件写入 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37717597/

相关文章:

java - Android 将 UTC 日期转换为本地时区

c++ - Boost beast::websocket 回调函数

javascript - 通过外部管理员或服务器更改移动网站背景颜色

android - 如何从音频剪辑转换文本?

java - 如何使用 CMU Sphinx 4 通过英语 voxforge 模型进行语音转文本

安卓。提示访问设备的位置

Android 使用 AlertDialog : how to wait for the user to take action? 激活 gps

python - 如何在 macOS 上使用 speech_recognition 模块修复 "OSError: [Errno -9986] Internal PortAudio error"?

android - 如何获取安卓手机的倾斜角度?

javascript - WebSocket:调用 close() 不会触发 onclose 处理程序?