flutter_oboe 0.0.1 copy "flutter_oboe: ^0.0.1" to clipboard
flutter_oboe: ^0.0.1 copied to clipboard

unlistedoutdated

Google Oboe audio engine plugins for flutter

example/lib/main.dart

import 'dart:io';
import 'dart:math';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'dart:async';
import 'package:flutter/foundation.dart' show kIsWeb;

import 'package:flutter/services.dart';
import 'package:flutter_oboe/flutter_oboe.dart';
import 'package:flutter_oboe/flutter_oboe_test.dart';
import 'package:external_path/external_path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:just_audio/just_audio.dart';

import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final stream = OboeTestStream();
  final flutterOboe = FlutterOboe();
  final noise = Float32List(512);
  late Timer timer;
  bool bFileExist = false;
  final _player = AudioPlayer();

  Future<String> _getPath() async {
    Directory appDocDir = await getApplicationDocumentsDirectory();
    return appDocDir.path;
    // return await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS);
  }

  // static Future<String> _findLocalPath({bool bVisibleToUser = true}) async {
  //   final directory = Platform.isAndroid ? bVisibleToUser ? await getExternalStorageDirectory() : await getApplicationDocumentsDirectory() : await getApplicationDocumentsDirectory();
  //   return directory.path;
  // }

  @override
  void initState() {
    super.initState();
    initPlatformState();

    // if (!kIsWeb) {
    //   var status = await Permission.microphone.request();
    //   if (status != PermissionStatus.granted) {
    //     print('Microphone permission is needed');
    //   }
    // }

    //Oboe Test
    for(var i=0; i< noise.length; i++){
      noise[i] = sin(8 * pi * i / noise.length);
    }
  }

  @override
  void dispose(){
    stream.dispose();
    super.dispose();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      platformVersion =
          await FlutterOboeTest.platformVersion ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Oboe Plugin'),
        ),
        body: SizedBox(
          width: double.infinity,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              Text('Running on: $_platformVersion').paddingOnly(bottom: 5),
              Text('1 + 2 = ${stream.performNativeAdd(1,2)}').paddingOnly(bottom: 5),
              Text('Sample rate : ${stream.getSampleRate()}').paddingOnly(bottom: 5),
              ElevatedButton(onPressed: startStream, child: const Text('Start audio stream')).paddingOnly(top: 50),
              ElevatedButton(onPressed: stopStream, child: const Text('Stop audio stream')).paddingOnly(bottom: 5),

              ElevatedButton(onPressed: startRecording, child: const Text('Start recording')).paddingOnly(top: 50),
              ElevatedButton(onPressed: stopRecording, child: const Text('Stop recording')).paddingOnly(bottom: 5),
              ElevatedButton(onPressed: saveRecording, child: const Text('Save recording')).paddingOnly(bottom: 5),
              ElevatedButton(onPressed: checkFile, child: const Text('Check saved audio file')).paddingOnly(bottom: 5),

              FutureBuilder(
                future: _getPath(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if (snapshot.hasData) {
                    return Text('Full Data path : ' + snapshot.data);
                  } else {
                    return Text("Loading");
                  }
                },
              ),

              Text(bFileExist ? 'File exist' : 'File not found').paddingOnly(bottom: 5),
              if(bFileExist)
                ElevatedButton(onPressed: playAudio, child: const Text('Play recorded audio')).paddingOnly(bottom: 5),

            ],
          ),
        ),
      ),
    );
  }

  //Testing
  void startStream(){
    stream.start();
    var interval = (512000 / stream.getSampleRate()).floor() + 1;
    timer = Timer.periodic(Duration(milliseconds: interval), (_){
      stream.write(noise);
    });
  }

  void stopStream(){
    timer?.cancel();
    stream.stop();
  }

  //Audio Recorder
  void startRecording(){
    //'/data/user/0/com.joydash.flutter_oboe_example/app_flutter/test.wav'
    flutterOboe.startRecording();
  }

  void stopRecording(){
    flutterOboe.stopRecording();
    flutterOboe.writeToFile('/data/user/0/com.joydash.flutter_oboe_example/app_flutter/test1.wav');
  }

  void saveRecording(){
    flutterOboe.writeToFile('/data/user/0/com.joydash.flutter_oboe_example/app_flutter/test1.wav');
  }

  void checkFile() async{
    bFileExist = await File('/data/user/0/com.joydash.flutter_oboe_example/app_flutter/test1.wav').exists();
    setState((){
      if(bFileExist)
        {
          playAudio();
        }
    });
  }

  void playAudio() async{
    flutterOboe.playFromFile('/data/user/0/com.joydash.flutter_oboe_example/app_flutter/test1.wav');
    // await _player.setFilePath('/data/user/0/com.joydash.flutter_oboe_example/app_flutter/test1.wav');
    // await _player.play();
  }

  void stopAudio() async{
    flutterOboe.stopPlayingFromFile();
  }
}
1
likes
0
points
38
downloads

Publisher

verified publisherjoydash.com

Weekly Downloads

Google Oboe audio engine plugins for flutter

Homepage

License

unknown (license)

Dependencies

ffi, flutter

More

Packages that depend on flutter_oboe

Packages that implement flutter_oboe