Streaming speech recognition with punctuation
Stay organized with collections
Save and categorize content based on your preferences.
Performs streaming speech recognition on raw PCM audio data.
Code sample
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],[],[],[],null,["# Streaming speech recognition with punctuation\n\nPerforms streaming speech recognition on raw PCM audio data.\n\nCode sample\n-----------\n\n### Java\n\n\nTo learn how to install and use the client library for Speech-to-Text, see\n[Speech-to-Text client libraries](/speech-to-text/docs/client-libraries).\n\n\nFor more information, see the\n[Speech-to-Text Java API\nreference documentation](/java/docs/reference/google-cloud-speech/latest/overview).\n\n\nTo authenticate to Speech-to-Text, set up Application Default Credentials.\nFor more information, see\n\n[Set up authentication for a local development environment](/docs/authentication/set-up-adc-local-dev-environment).\n\n /**\n * Performs streaming speech recognition on raw PCM audio data.\n *\n * @param fileName the path to a PCM audio file to transcribe.\n */\n public static void streamingTranscribeWithAutomaticPunctuation(String fileName) throws Exception {\n Path path = Paths.get(fileName);\n byte[] data = Files.readAllBytes(path);\n\n // Instantiates a client with GOOGLE_APPLICATION_CREDENTIALS\n try (SpeechClient speech = SpeechClient.create()) {\n\n // Configure request with local raw PCM audio\n RecognitionConfig recConfig =\n RecognitionConfig.newBuilder()\n .setEncoding(AudioEncoding.LINEAR16)\n .setLanguageCode(\"en-US\")\n .setSampleRateHertz(16000)\n .setEnableAutomaticPunctuation(true)\n .build();\n\n // Build the streaming config with the audio config\n StreamingRecognitionConfig config =\n StreamingRecognitionConfig.newBuilder().setConfig(recConfig).build();\n\n class ResponseApiStreamingObserver\u003cT\u003e implements ApiStreamObserver\u003cT\u003e {\n private final SettableFuture\u003cList\u003cT\u003e\u003e future = SettableFuture.create();\n private final List\u003cT\u003e messages = new java.util.ArrayList\u003cT\u003e();\n\n @Override\n public void onNext(T message) {\n messages.add(message);\n }\n\n @Override\n public void onError(Throwable t) {\n future.setException(t);\n }\n\n @Override\n public void onCompleted() {\n future.set(messages);\n }\n\n // Returns the SettableFuture object to get received messages / exceptions.\n public SettableFuture\u003cList\u003cT\u003e\u003e future() {\n return future;\n }\n }\n\n ResponseApiStreamingObserver\u003cStreamingRecognizeResponse\u003e responseObserver =\n new ResponseApiStreamingObserver\u003c\u003e();\n\n BidiStreamingCallable\u003cStreamingRecognizeRequest, StreamingRecognizeResponse\u003e callable =\n speech.streamingRecognizeCallable();\n\n ApiStreamObserver\u003cStreamingRecognizeRequest\u003e requestObserver =\n callable.bidiStreamingCall(responseObserver);\n\n // The first request must **only** contain the audio configuration:\n requestObserver.onNext(\n StreamingRecognizeRequest.newBuilder().setStreamingConfig(config).build());\n\n // Subsequent requests must **only** contain the audio data.\n requestObserver.onNext(\n StreamingRecognizeRequest.newBuilder()\n .setAudioContent(ByteString.copyFrom(data))\n .build());\n\n // Mark transmission as completed after sending the data.\n requestObserver.onCompleted();\n\n List\u003cStreamingRecognizeResponse\u003e responses = responseObserver.future().get();\n\n for (StreamingRecognizeResponse response : responses) {\n // For streaming recognize, the results list has one is_final result (if available) followed\n // by a number of in-progress results (if iterim_results is true) for subsequent utterances.\n // Just print the first result here.\n StreamingRecognitionResult result = response.getResultsList().get(0);\n // There can be several alternative transcripts for a given chunk of speech. Just use the\n // first (most likely) one here.\n SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);\n System.out.printf(\"Transcript : %s\\n\", alternative.getTranscript());\n }\n }\n }\n\nWhat's next\n-----------\n\n\nTo search and filter code samples for other Google Cloud products, see the\n[Google Cloud sample browser](/docs/samples?product=speech)."]]