import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
import 'package:audioplayers/audioplayers.dart';
import 'dart:io';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SpeechToTextScreen(),
);
}
}
class SpeechToTextScreen extends StatefulWidget {
@override
_SpeechToTextScreenState createState() => _SpeechToTextScreenState();
}
class _SpeechToTextScreenState extends State<SpeechToTextScreen> {
final AudioPlayer _audioPlayer = AudioPlayer();
bool _isRecording = false;
String _transcription = "";
Future<void> _recordAudio() async {
// Code to record audio using your preferred method
// Save the audio file to a temporary directory
Directory tempDir = await getTemporaryDirectory();
String tempPath = '${tempDir.path}/temp.wav';
// Start recording
// This is a placeholder. Use a suitable package to record audio in Flutter.
await _audioPlayer.startRecorder(toFile: tempPath);
setState(() {
_isRecording = true;
});
}
Future<void> _stopRecording() async {
// Stop recording
// This is a placeholder. Use a suitable package to stop recording in Flutter.
await _audioPlayer.stopRecorder();
setState(() {
_isRecording = false;
});
// Send the recorded file to the backend server
Directory tempDir = await getTemporaryDirectory();
String tempPath = '${tempDir.path}/temp.wav';
File audioFile = File(tempPath);
await _sendToServer(audioFile);
}
Future<void> _sendToServer(File audioFile) async {
var request = http.MultipartRequest(
'POST',
Uri.parse('http://your_server_ip:your_server_port/predict'),
);
request.files.add(await http.MultipartFile.fromPath('file', audioFile.path));
var response = await request.send();
if (response.statusCode == 200) {
var responseData = await response.stream.bytesToString();
setState(() {
_transcription = responseData; // Update this according to your server's response format
});
} else {
setState(() {
_transcription = "Error: ${response.statusCode}";
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Speech to Text")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_isRecording
? ElevatedButton(
onPressed: _stopRecording,
child: Text("Stop Recording"),
)
: ElevatedButton(
onPressed: _recordAudio,
child: Text("Start Recording"),
),
SizedBox(height: 20),
Text(_transcription),
],
),
),
);
}
}