【问题标题】:javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 16000.0 Hz, 16 bit, mono, 2 bytes/framejavax.sound.sampled.LineUnavailableException:行格式为 PCM_SIGNED 16000.0 Hz,16 位,单声道,2 字节/帧
【发布时间】:2020-02-13 13:34:58
【问题描述】:

我正在 Eclipse 中的一个项目中创建一个可运行的 jar,其中包含使用云语音进行语音识别的基本示例代码。无论如何,问题是当我从 Eclipse 运行代码时它工作正常,但是当我创建一个可运行的 jar 并执行它时,它会抛出以下异常:

" javax.sound.sampled.LineUnavailableException: 行格式 PCM_SIGNED 16000.0 Hz,16 位,单声道,2 字节/帧,小端非 支持的。 ”。

她是我的密码:

public static void streamingMicRecognize() throws Exception {

  ResponseObserver<StreamingRecognizeResponse> responseObserver = null;
  try (SpeechClient client = SpeechClient.create()) {

    responseObserver =
        new ResponseObserver<StreamingRecognizeResponse>() {
          ArrayList<StreamingRecognizeResponse> responses = new ArrayList<>();

          public void onStart(StreamController controller) {}

          public void onResponse(StreamingRecognizeResponse response) {
            responses.add(response);
          }

          public void onComplete() {
            for (StreamingRecognizeResponse response : responses) {
              StreamingRecognitionResult result = response.getResultsList().get(0);
              SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
              System.out.printf("Transcript : %s\n", alternative.getTranscript());
            }
          }

          public void onError(Throwable t) {
            System.out.println(t);
          }
        };

    ClientStream<StreamingRecognizeRequest> clientStream =
        client.streamingRecognizeCallable().splitCall(responseObserver);

    RecognitionConfig recognitionConfig =
        RecognitionConfig.newBuilder()
            .setEncoding(RecognitionConfig.AudioEncoding.LINEAR16)
            .setLanguageCode("en-US")
            .setSampleRateHertz(16000)
            .build();
    StreamingRecognitionConfig streamingRecognitionConfig =
        StreamingRecognitionConfig.newBuilder().setConfig(recognitionConfig).build();

    StreamingRecognizeRequest request =
        StreamingRecognizeRequest.newBuilder()
            .setStreamingConfig(streamingRecognitionConfig)
            .build(); // The first request in a streaming call has to be a config

    clientStream.send(request);
    // SampleRate:16000Hz, SampleSizeInBits: 16, Number of channels: 1, Signed: true,
    // bigEndian: false
    AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
    DataLine.Info targetInfo =
        new Info(
            TargetDataLine.class,
            audioFormat); // Set the system information to read from the microphone audio stream

    if (!AudioSystem.isLineSupported(targetInfo)) {
      System.out.println("Microphone not supported");
      System.exit(0);
    }
    // Target data line captures the audio stream the microphone produces.
    TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(targetInfo);
    targetDataLine.open(audioFormat);
    targetDataLine.start();
    System.out.println("Start speaking");
    long startTime = System.currentTimeMillis();
    // Audio Input Stream
    AudioInputStream audio = new AudioInputStream(targetDataLine);
    while (true) {
      long estimatedTime = System.currentTimeMillis() - startTime;
      byte[] data = new byte[6400];
      audio.read(data);
      if (estimatedTime > 60000) { // 60 seconds
        System.out.println("Stop speaking.");
        targetDataLine.stop();
        targetDataLine.close();
        break;
      }
      request =
          StreamingRecognizeRequest.newBuilder()
              .setAudioContent(ByteString.copyFrom(data))
              .build();
      clientStream.send(request);
    }
  } catch (Exception e) {
    System.out.println(e);
  }
  responseObserver.onComplete();
}

public static void main(String[] args) {

    LiveStream ls = new LiveStream();
    try {ls.streamingMicRecognize();} catch (Exception e) {e.printStackTrace();}
}

这是一个通过流音频识别语音的简单代码。

【问题讨论】:

  • 你用来构建 JAR 的命令是什么?请用它更新问题。
  • 嗨 boris,我使用 eclipse 导出作为可运行的 jar 功能来创建 jar ...
  • 我建议您在项目中使用 Maven 或 Gradle。它将允许您构建一个可运行的 JAR 以及保持与 IDE 无关。

标签: java speech-recognition google-cloud-speech speech-recognition-api google-speech-to-text-api


【解决方案1】:

在我使用包作为目标使用 maven 构建 jar 后,问题得到解决。感谢您的帮助:-D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2015-09-30
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多