flutter - Flutter - 如何保存和播放录制的音频文件?
问题描述
我这辈子都想不通。我要做的就是录制音频(如在录音机中),然后才能播放。
录音机类:
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_sound/flutter_sound.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
//String _pathToAudio = '/sdcard/myAudio.aac';
String _fileName = 'myAudio.aac';
String _path = "/storage/emulated/0";
class Recorder {
FlutterSoundRecorder? _recorder;
bool _isRecorderInitialized = false;
bool get isRecording => _recorder!.isRecording;
Future init() async {
_recorder = FlutterSoundRecorder();
//final directory = "/sdcard/downloads/";
//Directory? extStorageDir = await getExternalStorageDirectory();
//String _path = directory.path;
final status = await Permission.microphone.request();
if (status != PermissionStatus.granted) {
throw RecordingPermissionException('Recording permission required.');
}
await _recorder!.openAudioSession();
_isRecorderInitialized = true;
}
void _writeFileToStorage() async {
File audiofile = File('$_path/$_fileName');
Uint8List bytes = await audiofile.readAsBytes();
audiofile.writeAsBytes(bytes);
}
void dispose() {
_recorder!.closeAudioSession();
_recorder = null;
_isRecorderInitialized = false;
}
Future record() async {
if (!_isRecorderInitialized) {
return;
}
print('recording....');
await _recorder!.startRecorder(
toFile: '$_fileName',
//codec: Codec.aacMP4,
);
}
Future stop() async {
if (!_isRecorderInitialized) {
return;
}
await _recorder!.stopRecorder();
_writeFileToStorage();
print('stopped....');
}
Future toggleRecording() async {
if (_recorder!.isStopped) {
await record();
} else {
await stop();
}
}
}
目前我得到的错误是“无法打开文件,路径='/storage/emulated/0/myAudio.aac'(操作系统错误:没有这样的文件或目录,errno = 2)”。
我正在使用flutter_sound
解决方案
尝试使用path_provider初始化文件路径。
将这两行添加到init
函数的开头。
final directory = await getApplicationDocumentsDirectory();
_path = directory.path; // instead of "/storage/emulated/0"
不确定您如何尝试访问和播放该文件,但在我看来,它至少清除了错误。
推荐阅读
- django - 如何在 Django-Vieflow 中为用户分配任务
- javascript - 当我有一个 Javascript 函数包含一个外部 Javascript 文件时,如何使函数块直到外部文件完全加载?
- javascript - mongodb从方面返回对象
- python - % 数组中的元组?python(不将元组附加到数组中)
- angular - 使用 Angular 绑定 ngModelGroup 的名称
- haskell - Haskell 递归循环计数器
- javascript - 如何通过每种颜色在 Google 地图上获取形状绘制的 ID/数字顺序
- android - 如何在android中设置Imageview右端对齐到textview
- java - 无法将 gradle 项目导入 Eclipse Photon
- python - 如何在标记 Keras 时忽略字符