senseStream function

Stream<String> senseStream (dynamic inputData dynamic apiKey dynamic taskInput)

Analyzes audio stream and Returns it to JSON format stream.

The inputData must be PCM_Float and the sample rate must be 22050.

Implementation

Stream<String> senseStream(inputData, apiKey, taskInput) async* {
  taskError(taskInput);

  final channel = ClientChannel(
    hostAddress,
    port: 50051,
    options: const ChannelOptions(credentials: ChannelCredentials.insecure()),
  );
  final stub = SenseClient(channel);

  int sr = 22050;

  Stream<RequestStream> getStream(inputAudioStream) async* {
    await for (var audioData in inputAudioStream) {
      ByteBuffer buffer = new Float32List.fromList(audioData).buffer;
      List<int> intData = buffer.asUint8List();
      var streamRequest = RequestStream()
        ..data = intData
        ..apikey = apiKey
        ..sr = sr
        ..task = taskInput
        ..dtype = 'float32';
      yield streamRequest;
    }
  }

  try {
    var streamGenerator = getStream(inputData);
    var response = stub.sense_stream(streamGenerator);

    await for (var value in response) {
      yield value.outputs;
    }
  } catch (e) {
    throw ArgumentError('Invalid API key');
  }

  await channel.shutdown();
}