Home > Blockchain >  Flutter - How to save and play a recorded audio file?
Flutter - How to save and play a recorded audio file?

Time:10-10

I, for the life of me, can't figure this out. All I am trying to do is record an audio (as in a sound/voice recorder) and later be able to play it.

Recorder class:

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();
    }
  }
}

Currently the error I am getting is "Cannot open file, path = '/storage/emulated/0/myAudio.aac' (OS Error: No such file or directory, errno = 2)".

I am using flutter_sound

CodePudding user response:

Try initializing your file path by using path_provider.

Add these 2 lines to the beginning of your init function.

    final directory = await getApplicationDocumentsDirectory();
    _path = directory.path; // instead of "/storage/emulated/0"

Not sure how you're trying to access and play that file but on my end it at least cleared the error.

CodePudding user response:

Try replacing your _path with,

String _path = "storage/emulated/0";
  • Related