上一篇介紹了物件導向,還講了「物件中可以有函數」。
來看看怎麼用吧!
人工智能也可以設計物件,還可以要求指定物件名稱。
「請將FlutterWeb錄音功能整合成一個物件,名稱叫WebRecorder。」
class WebRecorder{
html.MediaRecorder? _mediaRecorder;
final _audioStreamController = StreamController<List<int>>();
Stream<List<int>> get audioStream => _audioStreamController.stream;
Future<void> startRecording() async {
final mediaStream = await html.window.navigator.mediaDevices?.getUserMedia({'audio': true});
_mediaRecorder = html.MediaRecorder(mediaStream!);
_mediaRecorder!.addEventListener('dataavailable', (event) {
final blobEvent = event as html.BlobEvent;
final reader = html.FileReader();
reader.readAsArrayBuffer(blobEvent.data!);
reader.onLoadEnd.listen((event) {
if (reader.readyState == html.FileReader.DONE && reader.result != null)
{
final data = reader.result as Uint8List;
print('data : ' + data.length.toString());
_audioStreamController.add(data);
}
});
});
_mediaRecorder!.start();
}
void stopRecording() async {
await Future.delayed(Duration(seconds: 10));
_mediaRecorder?.stop();
_mediaRecorder = null;
}
}
然後....
發生了一個問題!
我們不知道何時關閉錄音功能!
可以在執行speak前開始錄音,但這系列的語音功能並不支援「如何告訴其他程式它已經執行完畢」的設計。