babylog_audio_plugin 0.0.1
babylog_audio_plugin: ^0.0.1 copied to clipboard
A flutter plugin for streaming audio via websockets using babylog.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
// import 'package:flutter_sound/flutter_sound.dart';
import 'package:babylog_audio_plugin/babylog_audio_plugin.dart';
import 'package:babylog_audio_plugin/protobuf/dart/audio_message.pb.dart';
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Audio Stream Plugin Demo')),
body: AudioStreamDemo(),
),
);
}
}
class AudioStreamDemo extends StatefulWidget {
@override
_AudioStreamDemoState createState() => _AudioStreamDemoState();
}
class _AudioStreamDemoState extends State<AudioStreamDemo> {
BabylogAudioPlugin? _babylogAudioPlugin;
bool _isStreaming = false;
List<AudioSegment> _segments = [];
// final FlutterSoundRecorder _recorder = FlutterSoundRecorder();
// final FlutterSoundPlayer _player = FlutterSoundPlayer();
// late Uint8List _recordedAudioBytes;
// late String _path;
@override
void initState() {
super.initState();
_babylogAudioPlugin = BabylogAudioPlugin();
_babylogAudioPlugin?.segmentsStream.listen((segments) {
setState(() {
_segments = segments;
});
});
// _init();
}
// Future<void> _init() async {
// await _recorder.openAudioSession();
// await _player.openAudioSession();
// }
// Future<void> _startRecording() async {
// _path = await _recorder.startRecorder();
// }
// Future<void> _stopRecording() async {
// await _recorder.stopRecorder();
// _recordedAudioBytes = await _recorder.readRecordedBytes(_path);
// }
// Future<void> _play() async {
// if (_recordedAudioBytes != null) {
// await _player.startPlayerFromBuffer(_recordedAudioBytes);
// }
void _toggleStreaming() async {
if (!_isStreaming) {
await _babylogAudioPlugin?.connect('ws://localhost:8080');
} else {
await _babylogAudioPlugin?.disconnect();
}
// if (!_isStreaming) {
// await _babylogAudioPlugin?.connect('ws://localhost:8080');
// await _startRecording();
// } else {
// await _babylogAudioPlugin?.disconnect();
// await _stopRecording();
// }
setState(() {
_isStreaming = !_isStreaming;
});
}
void _sendAudioMessage() async {
var audioData = Uint8List.fromList([1, 2, 3, 4]);
await _babylogAudioPlugin?.sendAudioMessage(audioData, 44100, 1);
// await _babylogAudioPlugin?.sendAudioMessage(
// _recordedAudioBytes, 44100, 1);
print('Audio message sent.');
}
void dispose() {
_babylogAudioPlugin?.disconnect();
// _recorder.closeAudioSession();
// _player.closeAudioSession();
// _recorder = null;
// _player = null;
super.dispose();
}
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Audio Segments:',
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: ListView.builder(
itemCount: _segments.length,
itemBuilder: (context, index) {
final segment = _segments[index];
return ListTile(
title: Text('Segment ${index + 1}'),
subtitle: Text(
'Start time: ${segment.startTime}\n'
'End time: ${segment.endTime}\n'
'Label: ${segment.label}\n'
'Transcription: ${segment.transcription}',
),
);
},
),
),
ElevatedButton(
onPressed: _toggleStreaming,
child: Text(_isStreaming ? 'Stop Streaming' : 'Start Streaming'),
),
ElevatedButton(
onPressed: _isStreaming ? _sendAudioMessage : null,
child: Text('Send Audio Message'),
),
],
),
);
}
}