我想在flutter桌面平台上录音。
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 2.8.1, on Microsoft Windows [Version 10.0.19042.1526], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.11.5)
[√] Android Studio (version 2020.3)
[√] IntelliJ IDEA Ultimate Edition (version 2020.3)
[√] Connected device (4 available)
您尝试过可用的 flutter 软件包吗?如果没有,请尝试使用 flutter_desktop_audio_recorder 或 record。两者都支持Windows。
请按照自述文件部分了解实施细节。
使用record包,
第1步:声明用于存储录音数据的变量:
int recordDuration = 0;
Timer? _timer;
final _audioRecorder = Record();
StreamSubscription<RecordState>? _recordSub;
RecordState recordState = RecordState.stop;
String? audioPath;
bool? isRecording;
String? minutes = "00";
String? seconds = "00";
第2步:创建启动方法:
initRecorder() async {
_recordSub = _audioRecorder.onStateChanged().listen((recordStateThis) {
recordState = recordStateThis;
});
audioPath = null;
isRecorderInitialized = true;
notifyListeners();
}
第 3 步:创建开始、停止、恢复、暂停录制的方法:
Future<void> _start() async {
try {
if (await _audioRecorder.hasPermission()) {
final isSupported = await _audioRecorder.isEncoderSupported(
AudioEncoder.aacLc,
);
if (kDebugMode) {
print('${AudioEncoder.aacLc.name} supported: $isSupported');
}
// isRecording = await _audioRecorder.isRecording();
await _audioRecorder.start();
recordDuration = 0;
_startTimer();
}
} catch (e) {
if (kDebugMode) {
print(e);
}
}
}
Future<void> _stop() async {
_timer?.cancel();
recordDuration = 0;
final path = await _audioRecorder.stop();
if (path != null) {
onStop(path);
}
}
Future<void> _pause() async {
_timer?.cancel();
await _audioRecorder.pause();
}
Future<void> _resume() async {
_startTimer();
await _audioRecorder.resume();
}
第四步:声明启动定时器的方法:
void _startTimer() {
_timer?.cancel();
_timer = Timer.periodic(const Duration(seconds: 1), (Timer t) {
recordDuration++;
minutes = _formatNumber(recordDuration ~/ 60);
seconds = _formatNumber(recordDuration % 60);
notifyListeners();
});
}
String _formatNumber(int number) {
String numberStr = number.toString();
if (number < 10) {
numberStr = '0$numberStr';
}
return numberStr;
}
第 5 步:最后丢弃录音机:
disposeRecorder() {
_timer?.cancel();
_recordSub?.cancel();
_audioRecorder.dispose();
isRecorderInitialized = false;
debugPrint("Dispose Success");
}
在您的用户界面中使用这些方法。