Skip to main content

vit_soniox 2.0.0 copy "vit_soniox: ^2.0.0" to clipboard
vit_soniox: ^2.0.0 copied to clipboard

Real-time speech-to-text transcription using the Soniox WebSocket API, with support for final/non-final tokens and speaker diarization.

vit_soniox #

A Dart package for real-time speech-to-text transcription using the Soniox WebSocket API.

Features #

  • Real-time transcription with final and non-final token streams
  • Configurable audio format, language hints, speaker diarization, and endpoint detection
  • Bring-your-own WebSocket transport via WebsocketContract
  • The API key authenticates the CONNECTION (connect(url, apiKey: ...)); it is never sent in the start message

Example #

import 'package:vit_soniox/vit_soniox.dart';

void main() {
  final config = SonioxSessionConfig(
    apiKey: 'your-api-key',
    audio: AudioConfig.pcms16le(),
    languageHints: ['en'],
  );

  // CustomWebsocket implements WebsocketContract using your platform's WebSocket library.
  final soniox = SonioxWebsocket(config, websocket: CustomWebsocket());

  soniox.nonFinaltranscription.listen((text) {
    print('[Partial] $text');
  });

  soniox.finalTranscription.listen((text) {
    print('[Final] $text');
  });

  soniox.errors.listen((error) {
    print('[Error] ${error.code}: ${error.message}');
  });

  soniox.connect();

  // Stream audio chunks as Uint8List
  // soniox.addAudio(audioChunk);

  // When done:
  // soniox.disconnect();
}

Example App #

For a complete working example application, check out vit_soniox_example.

Implementing WebsocketContract #

Use web_socket_channel to implement the transport layer:

import 'dart:typed_data';
import 'package:vit_soniox/vit_soniox.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

class CustomWebsocket with WebsocketContract {
  WebSocketChannel? _channel;

  @override
  Future<void> connect(String url) async {
    _channel = WebSocketChannel.connect(Uri.parse(url));
    await _channel!.ready.timeout(Duration(seconds: 5));
  }

  @override
  Stream<String> get stream => _channel!.stream.cast<String>();

  @override
  void send(String data) => _channel?.sink.add(data);

  @override
  void sendBinary(Uint8List data) => _channel?.sink.add(data);

  @override
  void close() => _channel?.sink.close();
}
0
likes
160
points
80
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Real-time speech-to-text transcription using the Soniox WebSocket API, with support for final/non-final tokens and speaker diarization.

Repository (GitHub)
View/report issues

License

MIT (license)

More

Packages that depend on vit_soniox