Giter Club home page Giter Club logo

record's Introduction

Audio recorder from microphone to a given file path or stream.

No external dependencies:

  • On Android, AudioRecord and MediaCodec or MediaRecorder.
  • On iOS and macOS, AVFoundation.
  • On Windows, MediaFoundation.
  • On web, well... your browser! (and its underlying platform).

External dependencies:

  • On linux, encoding is provided by fmedia. It must be installed separately.

Platform feature parity matrix

Feature Android iOS web Windows macOS linux
pause/resume ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
amplitude(dBFS) ✔️ ✔️ ✔️ ✔️ ✔️
permission check ✔️ ✔️ ✔️ ✔️
num of channels ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
device selection ✔️ 1 / 2 (auto BT/mic) ✔️ ✔️ ✔️ ✔️
auto gain ✔️ 2 (always active?) ✔️
echo cancel ✔️ 2 ✔️
noise suppresion ✔️ 2 ✔️

File

Encoder Android iOS web Windows macOS linux
aacLc ✔️ ✔️ ? ✔️ ✔️ ✔️
aacEld ✔️ ✔️ ? ✔️
aacHe ✔️ ? ✔️
amrNb ✔️ ? ✔️
amrWb ✔️ ?
opus ✔️ ✔️ 3 ✔️
wav ✔️ 2 ✔️ ✔️ ✔️ ✔️ ✔️
flac ✔️ 2 ✔️ ? ✔️ ✔️ ✔️
pcm16bits ✔️ 2 ✔️ ✔️ ✔️ ✔️
  • Question marks (?) in web column mean that the formats are supported by the plugin but are not available in current (and tested) browsers (Chrome / Firefox).

Stream

Encoder Android iOS web Windows macOS linux
aacLc * ✔️ 2
aacEld * ✔️ 2
aacHe * ✔️ 2
pcm16bits ✔️ 2 ✔️ ✔️ ✔️ ✔️

* AAC is streamed with raw AAC with ADTS headers, so it's directly readable through a file!

  1. Bluetooth telephony device link (SCO) is automatically done but there's no phone call management.
  2. Unsupported on legacy Android recorder.
  3. Sample rate output is determined by your settings in OS. Bit depth is likely 32 bits.

Usage

import 'package:record/record.dart';

final record = AudioRecorder();

// Check and request permission if needed
if (await record.hasPermission()) {
  // Start recording to file
  await record.start(const RecordConfig(), path: 'aFullPath/myFile.m4a');
  // ... or to stream
  final stream = await record.startStream(const RecordConfig(AudioEncoder.pcm16bits));
}

// Stop recording...
final path = await record.stop();
// ... or cancel it (and implicitly remove file/blob).
await record.cancel();

record.dispose(); // As always, don't forget this one.

Setup, permissions and others

Android

Plugin targets API level 34 uses Java 17. Follow Gradle setup if needed.

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Optional: Add this permission if you want to use bluetooth telephony device like headset/earbuds -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Optional: Add this permission if you want to save your recordings in public folders -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • min SDK: 23 (amrNb/amrWb: 26, Opus: 29)

iOS

<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
  • min SDK: 11.0

macOS

<key>NSMicrophoneUsageDescription</key>
<string>Some message to describe why you need this permission</string>
  • In capabilities, activate "Audio input" in debug AND release schemes.
  • or directly in *.entitlements files
<key>com.apple.security.device.audio-input</key>
<true/>
  • min SDK: 10.15

record's People

Contributors

alexobviously avatar evertonmjunior avatar frananleo avatar ihdream72 avatar llfbandit avatar melihhakanpektas avatar pallopmax avatar sg5506844 avatar sirusdoma avatar toyozaki avatar ttys026 avatar youssefali424 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

record's Issues

_audioRecorder.stop() iOS file not present error

Android works fine but in iOS ,

On file length check onTap() ,

file = File(audioPath);
int sizeInBytes = await file.length();

[VERBOSE-2:ui_dart_state.cc(186)] Unhandled Exception: FileSystemException: Cannot retrieve length of file, path = 'file:///thefilepath/tmp/CB3B3C63-B2CA-427D-AB23-766F76234413.m4a' (**OS Error: No such file or directory**, errno = 2)

But when I check the file location its available there . It means the file is not place in that location instantly when the path is returned by _audioRecorder.stop() ,

How can this is handled?

dispose record while on pause state cause exception stop failed -1007

Hi Developer
I have faced an issue about dispose while on pause state of record

Here is the log
D/Record ( 8419): Start recording D/Record ( 8419): Pause recording D/Record ( 8419): Stop recording E/MediaRecorder( 8419): stop failed: -1007 E/MethodChannel#com.llfbandit.record( 8419): Failed to handle method call E/MethodChannel#com.llfbandit.record( 8419): java.lang.RuntimeException: stop failed. E/MethodChannel#com.llfbandit.record( 8419): at android.media.MediaRecorder.stop(Native Method) E/MethodChannel#com.llfbandit.record( 8419): at com.llfbandit.record.Recorder.stopRecording(Recorder.java:115) E/MethodChannel#com.llfbandit.record( 8419): at com.llfbandit.record.Recorder.stop(Recorder.java:63) E/MethodChannel#com.llfbandit.record( 8419): at com.llfbandit.record.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:62) E/MethodChannel#com.llfbandit.record( 8419): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) E/MethodChannel#com.llfbandit.record( 8419): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:84) E/MethodChannel#com.llfbandit.record( 8419): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:865) E/MethodChannel#com.llfbandit.record( 8419): at android.os.MessageQueue.nativePollOnce(Native Method) E/MethodChannel#com.llfbandit.record( 8419): at android.os.MessageQueue.next(MessageQueue.java:335) E/MethodChannel#com.llfbandit.record( 8419): at android.os.Looper.loop(Looper.java:183) E/MethodChannel#com.llfbandit.record( 8419): at android.app.ActivityThread.main(ActivityThread.java:7656) E/MethodChannel#com.llfbandit.record( 8419): at java.lang.reflect.Method.invoke(Native Method) E/MethodChannel#com.llfbandit.record( 8419): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) E/MethodChannel#com.llfbandit.record( 8419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) E/flutter ( 8419): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(error, stop failed., null, java.lang.RuntimeException: stop failed. E/flutter ( 8419): at android.media.MediaRecorder.stop(Native Method) E/flutter ( 8419): at com.llfbandit.record.Recorder.stopRecording(Recorder.java:115) E/flutter ( 8419): at com.llfbandit.record.Recorder.stop(Recorder.java:63) E/flutter ( 8419): at com.llfbandit.record.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:62) E/flutter ( 8419): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) E/flutter ( 8419): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:84) E/flutter ( 8419): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:865) E/flutter ( 8419): at android.os.MessageQueue.nativePollOnce(Native Method) E/flutter ( 8419): at android.os.MessageQueue.next(MessageQueue.java:335) E/flutter ( 8419): at android.os.Looper.loop(Looper.java:183) E/flutter ( 8419): at android.app.ActivityThread.main(ActivityThread.java:7656) E/flutter ( 8419): at java.lang.reflect.Method.invoke(Native Method) E/flutter ( 8419): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) E/flutter ( 8419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) E/flutter ( 8419): ) E/flutter ( 8419): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7) E/flutter ( 8419): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18) E/flutter ( 8419): <asynchronous suspension> E/flutter ( 8419): #2 _RepeatState._disposeAudio (package:baby_talk/screen/home/repeat/repeat_screen.dart:56:5) E/flutter ( 8419): <asynchronous suspension> E/flutter ( 8419):

Please let me know if you need any information else to solve this
Thanks you for the package

iOS Safari on Web

The little mic at the top of the browser in safari on ios stays on after stopping the recording. I've tried manually disposing the audio recorder object with no success.

Any idea?

PlatformException caused when stopping recording with a Timer.

I get this when my Timer tries to stop recording. My app is pretty much the example app beside removing the player piece and adding the timers.

The app works with starting/stopping with buttons but the timers make it crash. Any reason why?

PlatformException (PlatformException(error, stop failed., null, java.lang.RuntimeException: stop failed.
	at android.media.MediaRecorder.stop(Native Method)
	at com.llfbandit.record.Recorder.stopRecording(Recorder.java:115)
	at com.llfbandit.record.Recorder.stop(Recorder.java:63)
	at com.llfbandit.record.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:62)
	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
	at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:296)
	at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$DartMessenger(DartMessenger.java:320)
	at io.flutter.embedding.engine.dart.-$$Lambda$DartMessenger$TsixYUB5E6FpKhMtCSQVHKE89gQ.run(lambda)
	at android.os.Handler.handleCallback(Handler.java:815)
	at android.os.Handler.dispatchMessage(Handler.java:104)
	at android.os.Looper.loop(Looper.java:207)
	at android.app.ActivityThread.main(ActivityThread.java:5765)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
))

This is my added code


DateTime startTime = DateTime(2022, 02, 25, 17, 30, 00);
DateTime endTime = DateTime(2022, 02, 25, 17, 32, 00);

and I added this first in my build

    if (_isRecording == false) {
      Timer(startTime.difference(DateTime.now()), () {
        _start();
        print('START RECORDING');
      });
    }
    if (_isRecording) {
      Timer(endTime.difference(DateTime.now()), () {
        _stop();
        print('END RECORDING');
      });
    }

full path to audio file

Hy,

I got the example (android) running perfectly.
In my usercase i need to send the resulting audiofile by email.
So i added a mailer function.
The function itself works fine but i cant seem to get the (correct) full path to the audio file so the mailer cant atach it.
Can we add a variable that can hold the full path to be used by other functions or is there one already that simply gives the full path as string?

[Question] Working inside a PageView?

Copied most of the code, but inside a PageView works? As clicking it nothing happens and invalid argument(s)

i.e.
Screenshot 2021-06-17 at 20 02 14

But upon clicking nothing happens

These won't work in sdk >=2.7.0 correct as late keyword is not recognized, but I didn't migrate to null-safety as there are many others that will require refactoring:

 /*late*/ Icon icon;
 /*late*/ Color color;

Used inside PageView, but not have tried PageView.builder or PageView.custom?

Screenshot 2021-06-17 at 20 50 36

Turns out permission is not set? Even though Info.plist is set:

Screenshot 2021-06-17 at 22 49 45

Tried:
Screenshot 2021-06-17 at 23 15 05

but this no permission as caught by the _start() method

Do we need to migrate to null safety > 2.12.0 as currently on 2.7.0

Clicked to record, and now although permission seems to be granted, but didnt change to red and so clicking again:

Screenshot 2021-06-18 at 00 25 42

[Question] Pass as string or File?

Hi @llfbandit, the audio is located at:

file:///$HOME/Library/Developer/CoreSimulator/Devices/XXXXXXXX-XXXX-XXXX-XXXX-BE4E4FB87E55/
data/Containers/Data/Application/
XXXXXXXX-XXXX-XXXX-XXXX-9127A4823432/
tmp/XXXXXXXX-XXXX-4BEC-B6BD-2FE9A15A9811.m4a

Should we pass it as a String or as File? If String then we use absolute or relative path ?

say

  Future<void> uploadFilePath(String filePath) async {
  }

or

  Future<void> uploadFile(File filePath) async {
      File file = File(filePath);
  }

as I am getting

Unhandled Exception: 'package:firebase_storage/src/reference.dart': Failed
assertion: line 126 pos 12: 'file.absolute.existsSync()': is not true.

  Future<void> uploadFile(String filePath) async {
 
    File file = File(filePath);

   print("File inside uploadFile: " + filePath.toString());

////////////////////////////////////
//File inside uploadFile
file:///$HOME/Library/Developer/CoreSimulator/Devices/7705E1AF-FA63-4E6A-B3F2-BE4E4FB87E55/data/Containers/Data/Applic
ation/XXXXXXXX-XXXX-XXXX-XXXX-74B3B588FAA4/tmp/XXXXXXXX-XXXX-XXXX-XXXX-1D7571130760.m4a
////////////////////////////////////



    firebase_storage.SettableMetadata metadata =
        firebase_storage.SettableMetadata(
      cacheControl: 'max-age=60',
      contentType: 'audio/m4a',
      customMetadata: <String, String>{'file': 'audio'},
    );

    try {
      await firebase_storage.FirebaseStorage.instance
          .ref('file')
          .putFile(file, metadata);  <---- Unhandled Exception: 
          
    } on firebase_core.FirebaseException catch (e) {
      print("error: " + e.toString());
    }
  }
}

[Question] Dependencies needed?

dependencies:  
  path_provider: ^2.0.1  
  just_audio: ^0.7.1

as well as:

flutter:  
  plugin:    
    platforms:      
      android:        
        package: com.llfbandit.record        
    pluginClass: RecordPlugin      
    ios:        pluginClass: RecordPlugin

Do we need to install these dependencies as these are in the example pubspec.yaml, but not in main pubspec.yaml?

and also how to save to Firestore example thanks

Please provide the support for AudioEncoding.Linear16 for transcribing audio files

Description:

Need to record audio file whose sample rate is 16000 and encoder is linear 16 for transcribing audio files using goggle_speech.

Need support:

Future start({
String? path,
AudioEncoder encoder = AudioEncoder.AAC,
int bitRate = 128000,
double samplingRate = 44100.0,
})

Change encoder to linear16 and sample rate to 16000.0 also change audio file type to to audio and it is showing on metadata as video file after recording

image

The recorder is not recording.

When i run the app and start recording all runs fine but in the end the file plays just noises it does not record any sound.

if (await Record.hasPermission()) {
        estaGravando.value = await Record.isRecording();
        Directory tempDir = await getExternalStorageDirectory();

        String tempPath = '${tempDir.path}/${DateTime.now().toString()}.m4a';
        if (!estaGravando.value) {
          print("Gravando");
          await Record.start(
            path: tempPath, // required
            encoder: AudioEncoder.AAC, // by default
            bitRate: 128000, // by default
            // sampleRate: 44100, // by default
            samplingRate: 44100,
          );
        } else {
          await Record.stop();
          print("FInalizou a gravacao");
          print(tempPath);
        }
      }

Windows patform: DLLs shipped

Both debug and release DLLs for SFML are shipped with the package.
It should be possible to ship only the correct ones. But how to?

[Question] Working with 2.1.1 with just_audio

Hi @llfbandit : flutter pub add record but with version 2.1.1

dependencies:
record: ^2.1.1

import 'package:record/record.dart'; <--

Target of URI doesn't exist: 'package:record/record.dart'.
Try creating the file referenced by the URI, or Try using a URI for a file that does exist.

Screenshot 2021-07-22 at 23 34 17

Screenshot 2021-07-22 at 23 35 26

Playback slider is glitchy

I discovered a bug related to playback slider. If you move it while it is playing, it gets glitchy and you cannot really use it.

I attach a video where I use official demo.
Any help with this would be much appreciated!

FullSizeRender.mov

[Question] Integration into existing app

Why in the example main.dart when right clicked inside VSCode and Goto Definition:

import 'package:record/record.dart'

it is directed to:

Screenshot 2021-07-21 at 19 42 08

and clicked on

export 'package:record/src/record.dart';

takes us to:

Screenshot 2021-07-21 at 19 43 07

But in my own local project doing the same clicking on

import 'package:record/record.dart';

$HOME/.pub-cache/hosted/pub.dartlang.org/record-2.1.1/lib/record.dart

Screenshot 2021-07-21 at 19 44 29

Is this because my path_provider or something is not setup correctly as i expect both the example and in my local project to point to the same Record class. thanks.

environment:
sdk: ">=2.7.0 <3.0.0"

dependencies:
flutter:
sdk: flutter

just_audio:
path_provider:

record:
path: ../

[Question] Why play inside Pageview plays back previous audio? Could this be state not managed correctly?

Record audio and then when played, it plays back the previous recording instead of the immediate audio?

child: PageView(
children: <Widget>[
 AudioRecorder(
                                        onStop: (path) {
                                          setState(() {
                                            audioSource = ap.AudioSource.uri(
                                                Uri.parse(path!));
                                            showPlayer = true;
                                          });
                                        },
                                      ),


AudioPlayer(
                                        source: audioSource,
                                        onDelete: () {
                                          setState(() => showPlayer = false);
                                        },
                                      ),


inside the _stop(), used nextPage to navigate from AudioRecorder to AudioPlayer when Stop button clicked:

   pageController.nextPage(
        duration: Duration(milliseconds: 250), curve: Curves.linear);
  }

and also, in this context, delete does not delete as audio can still play?

It was working when using the example:

MaterialApp(
                                       home: Scaffold(
                                         body: Center(
                                           child: showPlayer
                                               ? Padding(
                                                   padding:
                                                       EdgeInsets.symmetric(
                                                           horizontal: 25),
                                                   child: AudioPlayer(
                                                     source: audioSource!,
                                                     onDelete: () {
                                                       setState(() =>
                                                           showPlayer = false);
                                                     },
                                                   ),
                                                 )
                                               : AudioRecorder(
                                                   onStop: (path) {
                                                     setState(() {
                                                       audioSource =
                                                           ap.AudioSource.uri(
                                                               Uri.parse(
                                                                   path!));
                                                       showPlayer = true;
                                                     });
                                                   },
                                                 ),
                                         ),
                                       ),
                                     ),


the only difference I see is the player boolean value used to decide to show or not?

W/MediaRecorder(30216): mediarecorder went away with unhandled events

I'm testing the package (with your example) and in iOS it doesn't give me any problems. In Android, on the other hand, it works fine on the Device but in the simulator it doesn't. It seems to be recording but when I hit play I don't hear anything. In the device, on the other hand, it is also heard.
I looked for any error messages and noticed this:
W/MediaRecorder(30216): mediarecorder went away with unhandled events

This message appears both when I use it with the Device and when I use it with the simulator, but while in the Device it works the same, in the simulator nothing is heard.
I found this answer to the above problem, hoping it will be helpful.
https://stackoverflow.com/questions/11871421/trying-to-record-audio-but-getting-message-mediarecorder-went-away-with-unhandl

On iOS it only records a few seconds.

Hi,

The package works great on Android but when running on iOS it only records a few seconds.

I tried waiting 20 seconds and then stopping recording but only got 1 second recording.

Testing on iphone ios 13.6 - Android works fine.

Inquiry

Hello there I'm new to flutter, I cloned the project and all , but later realized that the files weren't being saved in the temporary directory how can i get them to be seen. Thanks

Record to byte array(Uint8List)

I'm using web version. I can record only virtual file. Then I need finalized record and then load virtual file to byte array(Uint8List). It takes time. Although I could play and send the file already during recording. How can this process be optimized?

What is the lowest Amplitude?

Hi, nice work on this. Very much appreciated.

I want to create a UI to inform the user of the quality of the Audio Input - basically, the noise level.

The amplitude value has current and max but I need to know the lowest to be able to know the reference to transform it into a range between 0 and 100.

Any help is appreciated.

Null-Safety Support

Do you have any plans/timeline on when this library will support null-safety?

Use mp4 for the output File

Hello, I love the package. I just wanted to ask if it's possible to convert or directly record the audio in mp4 format. I tried using FFmpeg but it's a bit overpowered and too big. So I thought because I saw its possible on some other audio packages if its also possible here.

Let me know what you think.

Best Regards

Continue recording while app is in background

Hi there,

I can record while my app is awake on the foreground. But when I minify my app, when it is put in the background, the recording stop.

For example, I launch my app, I click the record button and I start to talk. After 10 seconds I press the home button of my phone and I continue to talk for 20 seconds more. Then I relaunch my app, and I click the stop button.

Instead of getting a record file of 30 seconds with my full record, I only get the 10 first seconds.

I tried to run the record plugin in an isolate using the flutter_isolate plugin, but it does the same thing.

Do you know a method to keep recording while the app is in the background?

Thanks a lot!

Failed to handle method call

E/MethodChannel#com.llfbandit.record(29081): Failed to handle method call
E/MethodChannel#com.llfbandit.record(29081): java.lang.RuntimeException: setAudioSource failed.
E/MethodChannel#com.llfbandit.record(29081): at android.media.MediaRecorder.setAudioSource(Native Method)
E/MethodChannel#com.llfbandit.record(29081): at com.llfbandit.record.Recorder.start(Recorder.java:41)
E/MethodChannel#com.llfbandit.record(29081): at com.llfbandit.record.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:54)
E/MethodChannel#com.llfbandit.record(29081): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:262)
E/MethodChannel#com.llfbandit.record(29081): at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:178)
E/MethodChannel#com.llfbandit.record(29081): at io.flutter.embedding.engine.dart.DartMessenger.lambda$handleMessageFromDart$0$DartMessenger(DartMessenger.java:206)
E/MethodChannel#com.llfbandit.record(29081): at io.flutter.embedding.engine.dart.-$$Lambda$DartMessenger$6ZD1MYkhaLxyPjtoFDxe45u43DI.run(Unknown Source:12)
E/MethodChannel#com.llfbandit.record(29081): at android.os.Handler.handleCallback(Handler.java:938)
E/MethodChannel#com.llfbandit.record(29081): at android.os.Handler.dispatchMessage(Handler.java:99)
E/MethodChannel#com.llfbandit.record(29081): at android.os.Looper.loop(Looper.java:236)
E/MethodChannel#com.llfbandit.record(29081): at android.app.ActivityThread.main(ActivityThread.java:8037)
E/MethodChannel#com.llfbandit.record(29081): at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#com.llfbandit.record(29081): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
E/MethodChannel#com.llfbandit.record(29081): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

Not working on IOS

When tapping on the record button I'm getting this error:

PlatformException(, Failed to start recording, null, null)

It works perfectly on android and I'm able to play the recording too

Unable to run example: Migrate `example` to Android embedding v2

Steps to reproduce

  1. Clone repo
  2. flutter pub get
  3. flutter run

Logs

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Warning
──────────────────────────────────────────────────────────────────────────────
Your Flutter application is created using an older version of the Android
embedding. It is being deprecated in favor of Android embedding v2. Follow the
steps at

https://flutter.dev/go/android-project-migration

to migrate your project. You may also pass the --ignore-deprecation flag to
ignore this check and continue with the deprecated v1 embedding. However,
the v1 Android embedding will be removed in future versions of Flutter.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The detected reason was:

  /Users/nils/Desktop/Projects/record/record/example/android/app/src/main/AndroidManifest.xml uses
  `android:name="io.flutter.app.FutterApplication"`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This app is using a deprecated version of the Android embedding.
To avoid unexpected runtime failures, or future build failures, try to migrate this app to the V2 embedding.
Take a look at the docs for migrating an app: https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects
The plugin `audio_session` requires your app to be migrated to the Android embedding v2. Follow the steps on
https://flutter.dev/go/android-project-migration and re-run this command.

duration returns null on web

Widget _buildSlider(double widgetWidth) {
final position = _audioPlayer.position;
final duration = _audioPlayer.duration;

the 'duration' call returns null on Chrome - works on actual android devices.

[✓] Flutter (Channel stable, 2.8.1, on macOS 12.1 21C52 darwin-arm, locale en-IN)
[✓] Android toolchain - develop for Android devices (Android SDK version 32.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] VS Code (version 1.63.2)

java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode

No Idea What went wrong .

Future _start() async {
try {
if (await _audioRecorder.hasPermission()) {
await _audioRecorder.start(encoder: AudioEncoder.AAC);

    bool isRecording = await _audioRecorder.isRecording();
    setState(() {
      _isRecording = isRecording;
      _recordDuration = 0;
    });

    _startTimer();
  }
} catch (e) {
  print(e);
}

}

E/MethodChannel#com.llfbandit.record(20547): java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
E/MethodChannel#com.llfbandit.record(20547): 	at androidx.fragment.app.FragmentActivity.checkForValidRequestCode(FragmentActivity.java:715)
E/MethodChannel#com.llfbandit.record(20547): 	at androidx.fragment.app.FragmentActivity.validateRequestPermissionsRequestCode(FragmentActivity.java:730)
E/MethodChannel#com.llfbandit.record(20547): 	at androidx.core.app.ActivityCompat.requestPermissions(ActivityCompat.java:500)
E/MethodChannel#com.llfbandit.record(20547): 	at com.llfbandit.record.MethodCallHandlerImpl.askForPermission(MethodCallHandlerImpl.java:132)
E/MethodChannel#com.llfbandit.record(20547): 	at com.llfbandit.record.MethodCallHandlerImpl.hasPermission(MethodCallHandlerImpl.java:120)
E/MethodChannel#com.llfbandit.record(20547): 	at com.llfbandit.record.MethodCallHandlerImpl.onMethodCall(MethodCallHandlerImpl.java:81)
E/MethodChannel#com.llfbandit.record(20547): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#com.llfbandit.record(20547): 	at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#com.llfbandit.record(20547): 	at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818)
E/MethodChannel#com.llfbandit.record(20547): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#com.llfbandit.record(20547): 	at android.os.MessageQueue.next(MessageQueue.java:336)
E/MethodChannel#com.llfbandit.record(20547): 	at android.os.Looper.loop(Looper.java:197)
E/MethodChannel#com.llfbandit.record(20547): 	at android.app.ActivityThread.main(ActivityThread.java:7807)
E/MethodChannel#com.llfbandit.record(20547): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#com.llfbandit.record(20547): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/MethodChannel#com.llfbandit.record(20547): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1047)

Resume when using multiple Records

Hi! Great work! I like this library because it is simple to use!

Unfortunately, I need a functionality that conflicts with this characteristic.

I need to have multiple open audio records on one page.

I would like to be able to pause and resume each of them.

Start 1°
Pause 1°
Start 2°
Pause 2°
Resume 1°

Unfortunately, it seems that there is only one static instance Record.Start(..)

is there any solution for this?
Like a flag on Record.Start(..., resume_on_file: true), so it could append to the already stored file?

Causing my build to fail

When I try to use this library my build fails with this output:

ld: warning: Could not find or use auto-linked library 'swiftObjectiveC'
ld: warning: Could not find or use auto-linked library 'swiftCoreGraphics'
ld: warning: Could not find or use auto-linked library 'swiftCore'
ld: warning: Could not find or use auto-linked library 'swiftQuartzCore'
ld: warning: Could not find or use auto-linked library 'swiftCoreFoundation'
ld: warning: Could not find or use auto-linked library 'swiftDispatch'
ld: warning: Could not find or use auto-linked library 'swiftCoreMedia'
ld: warning: Could not find or use auto-linked library 'swiftAVFoundation'
ld: warning: Could not find or use auto-linked library 'swiftCompatibility51'
ld: warning: Could not find or use auto-linked library 'swiftsimd'
ld: warning: Could not find or use auto-linked library 'swiftFoundation'
ld: warning: Could not find or use auto-linked library 'swiftMetal'
ld: warning: Could not find or use auto-linked library 'swiftCoreMIDI'
ld: warning: Could not find or use auto-linked library 'swiftUniformTypeIdentifiers'
ld: warning: Could not find or use auto-linked library 'swiftDarwin'
ld: warning: Could not find or use auto-linked library 'swiftUIKit'
ld: warning: Could not find or use auto-linked library 'swiftCoreAudio'
ld: warning: Could not find or use auto-linked library 'swiftCoreImage'
ld: warning: Could not find or use auto-linked library 'swiftSwiftOnoneSupport'
Undefined symbols for architecture arm64:
"method descriptor for Swift.SetAlgebra.subtract(A) -> ()", referenced from:
l_got.$ss10SetAlgebraP8subtractyyxFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.init<A where A1: Swift.Sequence, A.Element ==
A1.Element>(__owned A1) -> A", referenced from:
l_got.$ss10SetAlgebraPyxqd__ncSTRd__7ElementQyd__ACRtzlufCTq in
librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.isEmpty.getter : Swift.Bool", referenced from:
l_got.$ss10SetAlgebraP7isEmptySbvgTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.isDisjoint(with: A) -> Swift.Bool", referenced
from:
l_got.$ss10SetAlgebraP10isDisjoint4withSbx_tFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.isSubset(of: A) -> Swift.Bool", referenced from:
l_got.$ss10SetAlgebraP8isSubset2ofSbx_tFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.subtracting(A) -> A", referenced from:
l_got.$ss10SetAlgebraP11subtractingyxxFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.formIntersection(A) -> ()", referenced from:
l_got.$ss10SetAlgebraP16formIntersectionyyxFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.update(with: __owned A.Element) -> A.Element?",
referenced from:
l_got.$ss10SetAlgebraP6update4with7ElementQzSgAFn_tFTq in
librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.remove(A.Element) -> A.Element?", referenced from:
l_got.$ss10SetAlgebraP6removey7ElementQzSgAEFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.insert(__owned A.Element) -> (inserted: Swift.Bool,
memberAfterInsert: A.Element)", referenced from:
l_got.$ss10SetAlgebraP6insertySb8inserted_7ElementQz17memberAfterInserttAFnFTq in
librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.intersection(A) -> A", referenced from:
l_got.$ss10SetAlgebraP12intersectionyxxFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.union(__owned A) -> A", referenced from:
l_got.$ss10SetAlgebraP5unionyxxnFTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.init() -> A", referenced from:
l_got.$ss10SetAlgebraPxycfCTq in librecord.a(SwiftRecordPlugin.o)
"base conformance descriptor for Swift.OptionSet: Swift.SetAlgebra", referenced from:
l_got.$ss9OptionSetPs0B7AlgebraTb in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.OptionSet.init(rawValue: A.RawValue) -> A", referenced from:
l_got.$ss9OptionSetP8rawValuex03RawD0Qz_tcfCTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.RawRepresentable.rawValue.getter : A.RawValue", referenced
from:
l_got.$sSY8rawValue03RawB0QzvgTq in librecord.a(SwiftRecordPlugin.o)
"method descriptor for static Swift.Equatable.== infix(A, A) -> Swift.Bool", referenced
from:
l_got.$sSQ2eeoiySbx_xtFZTq in librecord.a(SwiftRecordPlugin.o)
"protocol descriptor for Swift.Equatable", referenced from:
l_got.$sSQMp in librecord.a(SwiftRecordPlugin.o)
"protocol descriptor for Swift.ExpressibleByArrayLiteral", referenced from:
l_got.$ss25ExpressibleByArrayLiteralMp in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftCoreImage", referenced from:
_swift_FORCE_LOAD$swiftCoreImage$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCoreImage$_record)
"_swift_FORCE_LOAD$_swiftUniformTypeIdentifiers", referenced from:
_swift_FORCE_LOAD$swiftUniformTypeIdentifiers$_record in
librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftUniformTypeIdentifiers$_record)
"_swift_FORCE_LOAD$_swiftCoreAudio", referenced from:
_swift_FORCE_LOAD$swiftCoreAudio$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCoreAudio$_record)
"_swift_FORCE_LOAD$_swiftCoreMIDI", referenced from:
_swift_FORCE_LOAD$swiftCoreMIDI$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCoreMIDI$_record)
"_swift_FORCE_LOAD$_swiftCoreGraphics", referenced from:
_swift_FORCE_LOAD$swiftCoreGraphics$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCoreGraphics$_record)
"_swift_FORCE_LOAD$_swiftDarwin", referenced from:
_swift_FORCE_LOAD$swiftDarwin$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftDarwin$_record)
"_swift_FORCE_LOAD$_swiftAVFoundation", referenced from:
_swift_FORCE_LOAD$swiftAVFoundation$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftAVFoundation$_record)
"nominal type descriptor for Dispatch.DispatchWorkItemFlags", referenced from:
_symbolic Say_____G 8Dispatch0A13WorkItemFlagsV in librecord.a(SwiftRecordPlugin.o)
"nominal type descriptor for Foundation.URL", referenced from:
_symbolic _____Sg 10Foundation3URLV in librecord.a(SwiftRecordPlugin.o)
"protocol conformance descriptor for Swift.UInt : Swift.FixedWidthInteger in Swift",
referenced from:
lazy protocol witness table accessor for type Swift.UInt and conformance Swift.UInt :
Swift.FixedWidthInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"associated type descriptor for Swift.SetAlgebra.Element", referenced from:
l_got.$s7Elements10SetAlgebraPTl in librecord.a(SwiftRecordPlugin.o)
"_swift_errorRelease", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"type metadata accessor for Swift.Array", referenced from:
type metadata accessor for [Dispatch.DispatchWorkItemFlags] in
librecord.a(SwiftRecordPlugin.o)
"value witness table for Builtin.UnknownObject", referenced from:
full type metadata for record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
"protocol conformance descriptor for Swift.AutoreleasingUnsafeMutablePointer :
Swift._Pointer in Swift", referenced from:
lazy protocol witness table accessor for type
Swift.AutoreleasingUnsafeMutablePointer<__C.NSError?> and conformance
Swift.AutoreleasingUnsafeMutablePointer : Swift._Pointer in Swift in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.subtracting(A) -> A", referenced from:
protocol witness for Swift.SetAlgebra.subtracting(A) -> A in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.subtracting(A) -> A in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A == A.Element>.remove(A) -> A?", referenced
from:
protocol witness for Swift.SetAlgebra.remove(A.Element) -> A.Element? in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.remove(A.Element) -> A.Element? in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftFoundation", referenced from:
_swift_FORCE_LOAD$swiftFoundation$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftFoundation$_record)
"(extension in Swift):Swift.OptionSet< where A == A.Element>.insert(A) -> (inserted:
Swift.Bool, memberAfterInsert: A)", referenced from:
protocol witness for Swift.SetAlgebra.insert(__owned A.Element) -> (inserted:
Swift.Bool, memberAfterInsert: A.Element) in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.insert(__owned A.Element) -> (inserted:
Swift.Bool, memberAfterInsert: A.Element) in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A == A.Element>.update(with: A) -> A?",
referenced from:
protocol witness for Swift.SetAlgebra.update(with: __owned A.Element) -> A.Element? in
conformance __C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.update(with: __owned A.Element) -> A.Element? in
conformance __C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet.union(A) -> A", referenced from:
protocol witness for Swift.SetAlgebra.union(__owned A) -> A in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.union(__owned A) -> A in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"protocol descriptor for Swift.SetAlgebra", referenced from:
l_got.$ss10SetAlgebraMp in librecord.a(SwiftRecordPlugin.o)
"swift_unknownObjectRelease", referenced from:
static record.SwiftRecordPlugin.register(with: __C.FlutterPluginRegistrar) -> () in
librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.FlutterMethodChannel.__allocating_init(name: Swift.String,
binaryMessenger: __C.FlutterBinaryMessenger) -> __C.FlutterMethodChannel in
librecord.a(SwiftRecordPlugin.o)
@objc static record.SwiftRecordPlugin.register(with: __C.FlutterPluginRegistrar) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
reabstraction thunk helper from @escaping @callee_unowned @convention(block) (@unowned
Swift.AnyObject?) -> () to @escaping @callee_guaranteed (@in_guaranteed Any?) -> () in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.FlutterError.__allocating_init(code: Swift.String, message: Swift.String?,
details: Any?) -> __C.FlutterError in librecord.a(SwiftRecordPlugin.o)
...
"dispatch thunk of Swift.SetAlgebra.init<A where A1: Swift.Sequence, A.Element ==
A1.Element>(__owned A1) -> A", referenced from:
default argument 2 of (extension in Dispatch):__C.OS_dispatch_queue.async(group:
__C.OS_dispatch_group?, qos: Dispatch.DispatchQoS, flags:
Dispatch.DispatchWorkItemFlags, execute: @convention(block) () -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.isEmpty.getter : Swift.Bool", referenced from:
protocol witness for Swift.SetAlgebra.isEmpty.getter : Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.isEmpty.getter : Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.symmetricDifference(__owned A) -> A", referenced
from:
l_got.$ss10SetAlgebraP19symmetricDifferenceyxxnFTq in librecord.a(SwiftRecordPlugin.o)
"protocol descriptor for Swift.OptionSet", referenced from:
l_got.$ss9OptionSetMp in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet.symmetricDifference(A) -> A", referenced from:
protocol witness for Swift.SetAlgebra.symmetricDifference(__owned A) -> A in
conformance __C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.symmetricDifference(__owned A) -> A in
conformance __C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A == A.Element>.contains(A) -> Swift.Bool",
referenced from:
protocol witness for Swift.SetAlgebra.contains(A.Element) -> Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.contains(A.Element) -> Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"type metadata accessor for Swift.Optional", referenced from:
type metadata accessor for __C.NSError? in librecord.a(SwiftRecordPlugin.o)
"_swift_getForeignTypeMetadata", referenced from:
type metadata accessor for __C.AVAudioSessionCategoryOptions in
librecord.a(SwiftRecordPlugin.o)
type metadata accessor for __C.AVAudioSessionSetActiveOptions in
librecord.a(SwiftRecordPlugin.o)
"protocol conformance descriptor for Swift.UInt32 : Swift.BinaryInteger in Swift",
referenced from:
lazy protocol witness table accessor for type Swift.UInt32 and conformance Swift.UInt32
: Swift.BinaryInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"protocol conformance descriptor for Swift.Int : Swift.SignedInteger in Swift", referenced
from:
lazy protocol witness table accessor for type Swift.Int and conformance Swift.Int :
Swift.SignedInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftCompatibility51", referenced from:
_swift_FORCE_LOAD$swiftCompatibility51$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCompatibility51$_record)
"type metadata for Swift.UInt32", referenced from:
record.SwiftRecordPlugin.(getEncoder in _3128433EDB1AEB6090299F7BC8F33941)(Swift.Int)
-> Swift.Int in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Swift.UInt32 and conformance Swift.UInt32
: Swift.BinaryInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"_swift_unknownObjectUnownedDestroy", referenced from:
l_objectdestroy.3 in librecord.a(SwiftRecordPlugin.o)
"value witness table for Builtin.Int64", referenced from:
full type metadata for __C.AVAudioSessionSetActiveOptions in
librecord.a(SwiftRecordPlugin.o)
full type metadata for __C.AVAudioSessionCategoryOptions in
librecord.a(SwiftRecordPlugin.o)
"_swift_deallocObject", referenced from:
l_objectdestroy in librecord.a(SwiftRecordPlugin.o)
l_objectdestroy.3 in librecord.a(SwiftRecordPlugin.o)
l_objectdestroy.6 in librecord.a(SwiftRecordPlugin.o)
"_swift_getTypeByMangledNameInContext", referenced from:
___swift_instantiateConcreteTypeFromMangledName in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra< where A.ArrayLiteralElement ==
A.Element>.init(arrayLiteral: A.ArrayLiteralElement...) -> A", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.ExpressibleByArrayLiteral.init(arrayLiteral:
A.ArrayLiteralElement...) -> A in conformance __C.AVAudioSessionCategoryOptions :
Swift.ExpressibleByArrayLiteral in __C_Synthesized in librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.ExpressibleByArrayLiteral.init(arrayLiteral:
A.ArrayLiteralElement...) -> A in conformance __C.AVAudioSessionSetActiveOptions :
Swift.ExpressibleByArrayLiteral in __C_Synthesized in librecord.a(SwiftRecordPlugin.o)
"static Swift.Array._allocateBufferUninitialized(minimumCapacity: Swift.Int) ->
Swift._ArrayBuffer", referenced from:
generic specialization <serialized, Dispatch.DispatchWorkItemFlags> of static
Swift.Array._allocateUninitialized(Swift.Int) -> ([A], Swift.UnsafeMutablePointer)
in librecord.a(SwiftRecordPlugin.o)
"Swift.== infix<A where A: Swift.RawRepresentable, A.RawValue: Swift.Equatable>(A, A) ->
Swift.Bool", referenced from:
protocol witness for static Swift.Equatable.== infix(A, A) -> Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.Equatable in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for static Swift.Equatable.== infix(A, A) -> Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.Equatable in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A.RawValue:
Swift.FixedWidthInteger>.formUnion(A) -> ()", referenced from:
protocol witness for Swift.SetAlgebra.formUnion(__owned A) -> () in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.formUnion(__owned A) -> () in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SignedInteger< where A: Swift.FixedWidthInteger>.init(A1) -> A", referenced from:
record.SwiftRecordPlugin.(getEncoder in _3128433EDB1AEB6090299F7BC8F33941)(Swift.Int)
-> Swift.Int in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A.RawValue: Swift.FixedWidthInteger>.init() ->
A", referenced from:
protocol witness for Swift.SetAlgebra.init() -> A in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.init() -> A in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"swift_retain", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(hasPermission in _3128433EDB1AEB6090299F7BC8F33941)((Any?) ->
()) -> () in librecord.a(SwiftRecordPlugin.o)
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping
@callee_unowned @convention(block) () -> () in librecord.a(SwiftRecordPlugin.o)
reabstraction thunk helper from @escaping @callee_guaranteed (@unowned Swift.Bool) ->
() to @escaping @callee_unowned @convention(block) (@unowned Swift.Bool) -> () in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(stop in 3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) ->
() in librecord.a(SwiftRecordPlugin.o)
...
"protocol witness table for Swift.String : Swift.Hashable in Swift", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"Swift._allocateUninitializedArray(Builtin.Word) -> ([A], Builtin.RawPointer)",
referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftCoreMedia", referenced from:
_swift_FORCE_LOAD$swiftCoreMedia$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCoreMedia$_record)
"Foundation.URL.init(string: __shared Swift.String) -> Foundation.URL?", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftDispatch", referenced from:
_swift_FORCE_LOAD$swiftDispatch$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftDispatch$_record)
"base conformance descriptor for Swift.SetAlgebra: Swift.ExpressibleByArrayLiteral",
referenced from:
l_got.$ss10SetAlgebraPs25ExpressibleByArrayLiteralTb in
librecord.a(SwiftRecordPlugin.o)
"__swiftEmptyArrayStorage", referenced from:
generic specialization <serialized, Dispatch.DispatchWorkItemFlags> of static
Swift.Array._allocateUninitialized(Swift.Int) -> ([A], Swift.UnsafeMutablePointer)
in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.ExpressibleByArrayLiteral.init(arrayLiteral:
A.ArrayLiteralElement...) -> A", referenced from:
l_got.$ss25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfCTq in
librecord.a(SwiftRecordPlugin.o)
"Swift.bridgeAnyObjectToAny(Swift.AnyObject?) -> Any", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.isSubset(of: A) -> Swift.Bool", referenced from:
protocol witness for Swift.SetAlgebra.isSubset(of: A) -> Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.isSubset(of: A) -> Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"protocol descriptor for Swift.RawRepresentable", referenced from:
l_got.$sSYMp in librecord.a(SwiftRecordPlugin.o)
"Foundation._convertNSErrorToError(__C.NSError?) -> Swift.Error", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"Foundation.URL._bridgeToObjectiveC() -> __C.NSURL", referenced from:
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"associated type descriptor for Swift.ExpressibleByArrayLiteral.ArrayLiteralElement",
referenced from:
l_got.$s19ArrayLiteralElements013ExpressibleByaB0PTl in
librecord.a(SwiftRecordPlugin.o)
"type metadata accessor for Dispatch.DispatchWorkItemFlags", referenced from:
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
default argument 2 of (extension in Dispatch):__C.OS_dispatch_queue.async(group:
__C.OS_dispatch_group?, qos: Dispatch.DispatchQoS, flags:
Dispatch.DispatchWorkItemFlags, execute: @convention(block) () -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
generic specialization <serialized, Dispatch.DispatchWorkItemFlags> of static
Swift.Array._allocateUninitialized(Swift.Int) -> ([A], Swift.UnsafeMutablePointer)
in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Dispatch.DispatchWorkItemFlags and
conformance Dispatch.DispatchWorkItemFlags : Swift.SetAlgebra in Dispatch in
librecord.a(SwiftRecordPlugin.o)
type metadata accessor for [Dispatch.DispatchWorkItemFlags] in
librecord.a(SwiftRecordPlugin.o)
"_swift_getObjCClassFromMetadata", referenced from:
@nonobjc __C.FlutterMethodChannel.__allocating_init(name: Swift.String,
binaryMessenger: __C.FlutterBinaryMessenger) -> __C.FlutterMethodChannel in
librecord.a(SwiftRecordPlugin.o)
__C.AVAudioRecorder.__allocating_init(url: Foundation.URL, settings: [Swift.String :
Any]) throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.FlutterError.__allocating_init(code: Swift.String, message: Swift.String?,
details: Any?) -> __C.FlutterError in librecord.a(SwiftRecordPlugin.o)
"static (extension in Dispatch):__C.OS_dispatch_queue.main.getter : __C.OS_dispatch_queue",
referenced from:
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftObjectiveC", referenced from:
_swift_FORCE_LOAD$swiftObjectiveC$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftObjectiveC$_record)
"base conformance descriptor for Swift.OptionSet: Swift.RawRepresentable", referenced from:
l_got.$ss9OptionSetPSYTb in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftMetal", referenced from:
_swift_FORCE_LOAD$swiftMetal$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftMetal$_record)
"_swift_endAccess", referenced from:
record.SwiftRecordPlugin.isRecording.getter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.isRecording.setter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.isRecording.modify : Swift.Bool with unmangled suffix
".resume.0" in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.hasPermission.getter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.hasPermission.setter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.hasPermission.modify : Swift.Bool with unmangled suffix
".resume.0" in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.audioRecorder.getter : __C.AVAudioRecorder? in
librecord.a(SwiftRecordPlugin.o)
...
"Swift.Dictionary.init(dictionaryLiteral: (A, B)...) -> [A : B]", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"Foundation.URL.init(fileURLWithPath: __shared Swift.String) -> Foundation.URL", referenced
from:
implicit closure #1 () throws -> Foundation.URL in record.SwiftRecordPlugin.(start in
_3128433EDB1AEB6090299F7BC8F33941)(path: Swift.String, encoder: Swift.Int, bitRate:
Swift.Int, samplingRate: Swift.Float, result: (Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
"_swift_willThrow", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"(extension in Dispatch):__C.OS_dispatch_queue.async(group: __C.OS_dispatch_group?, qos:
Dispatch.DispatchQoS, flags: Dispatch.DispatchWorkItemFlags, execute: @convention(block) ()
-> ()) -> ()", referenced from:
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
(maybe you meant: default argument 1 of (extension in
Dispatch):__C.OS_dispatch_queue.async(group: __C.OS_dispatch_group?, qos:
Dispatch.DispatchQoS, flags: Dispatch.DispatchWorkItemFlags, execute: @convention(block)
() -> ()) -> (), default argument 0 of (extension in
Dispatch):__C.OS_dispatch_queue.async(group: __C.OS_dispatch_group?, qos:
Dispatch.DispatchQoS, flags: Dispatch.DispatchWorkItemFlags, execute: @convention(block)
() -> ()) -> () , default argument 2 of (extension in
Dispatch):__C.OS_dispatch_queue.async(group: __C.OS_dispatch_group?, qos:
Dispatch.DispatchQoS, flags: Dispatch.DispatchWorkItemFlags, execute: @convention(block)
() -> ()) -> () )
"type metadata accessor for Foundation.URL", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
outlined init with copy of Foundation.URL? in librecord.a(SwiftRecordPlugin.o)
outlined destroy of Foundation.URL? in librecord.a(SwiftRecordPlugin.o)
"Swift.bridgeAnythingToObjectiveC(A) -> Swift.AnyObject", referenced from:
reabstraction thunk helper from @escaping @callee_unowned @convention(block) (@unowned
Swift.AnyObject?) -> () to @escaping @callee_guaranteed (@in_guaranteed Any?) -> () in
librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.FlutterError.__allocating_init(code: Swift.String, message: Swift.String?,
details: Any?) -> __C.FlutterError in librecord.a(SwiftRecordPlugin.o)
"type metadata for Swift.Int", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(getEncoder in 3128433EDB1AEB6090299F7BC8F33941)(Swift.Int)
-> Swift.Int in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Swift.Int and conformance Swift.Int :
Swift.FixedWidthInteger in Swift in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Swift.Int and conformance Swift.Int :
Swift.SignedInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"type metadata for Any", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftsimd", referenced from:
_swift_FORCE_LOAD$swiftsimd$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftsimd$_record)
"protocol conformance descriptor for [A] : Swift.Sequence in Swift", referenced from:
lazy protocol witness table accessor for type [Dispatch.DispatchWorkItemFlags] and
conformance [A] : Swift.Sequence in Swift in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftUIKit", referenced from:
_swift_FORCE_LOAD$swiftUIKit$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftUIKit$_record)
"_swift_unknownObjectUnownedInit", referenced from:
record.SwiftRecordPlugin.(hasPermission in 3128433EDB1AEB6090299F7BC8F33941)((Any?) ->
()) -> () in librecord.a(SwiftRecordPlugin.o)
"type metadata for Swift.UInt", referenced from:
lazy protocol witness table accessor for type Swift.UInt and conformance Swift.UInt :
Swift.FixedWidthInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"static (extension in
Foundation):Swift.String.unconditionallyBridgeFromObjectiveC(__C.NSString?) ->
Swift.String", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in 3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"protocol conformance descriptor for Dispatch.DispatchWorkItemFlags : Swift.SetAlgebra in
Dispatch", referenced from:
lazy protocol witness table accessor for type Dispatch.DispatchWorkItemFlags and
conformance Dispatch.DispatchWorkItemFlags : Swift.SetAlgebra in Dispatch in
librecord.a(SwiftRecordPlugin.o)
"Swift.Dictionary.subscript.getter : (A) -> B?", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A.RawValue:
Swift.FixedWidthInteger>.formSymmetricDifference(A) -> ()", referenced from:
protocol witness for Swift.SetAlgebra.formSymmetricDifference(__owned A) -> () in
conformance __C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.formSymmetricDifference(__owned A) -> () in
conformance __C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"type metadata for Swift.Float", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in 3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"swift_dynamicCast", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
"type metadata for Swift.Bool", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(hasPermission in _3128433EDB1AEB6090299F7BC8F33941)((Any?) ->
()) -> () in librecord.a(SwiftRecordPlugin.o)
"swift_bridgeObjectRetain", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in 3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"static Swift.String.== infix(Swift.String, Swift.String) -> Swift.Bool", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
"protocol conformance descriptor for Swift.Int : Swift.FixedWidthInteger in Swift",
referenced from:
lazy protocol witness table accessor for type Swift.Int and conformance Swift.Int :
Swift.FixedWidthInteger in Swift in librecord.a(SwiftRecordPlugin.o)
"protocol witness table for Swift.UInt : Swift.Equatable in Swift", referenced from:
protocol witness for static Swift.Equatable.== infix(A, A) -> Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.Equatable in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for static Swift.Equatable.== infix(A, A) -> Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.Equatable in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"_swift_getWitnessTable", referenced from:
lazy protocol witness table accessor for type Swift.Int and conformance Swift.Int :
Swift.FixedWidthInteger in Swift in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Swift.Int and conformance Swift.Int :
Swift.SignedInteger in Swift in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Swift.UInt32 and conformance Swift.UInt32
: Swift.BinaryInteger in Swift in librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type __C.AVAudioSessionCategoryOptions and
conformance __C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type __C.AVAudioSessionSetActiveOptions and
conformance __C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type
Swift.AutoreleasingUnsafeMutablePointer<__C.NSError?> and conformance
Swift.AutoreleasingUnsafeMutablePointer : Swift._Pointer in Swift in
librecord.a(SwiftRecordPlugin.o)
lazy protocol witness table accessor for type Dispatch.DispatchWorkItemFlags and
conformance Dispatch.DispatchWorkItemFlags : Swift.SetAlgebra in Dispatch in
librecord.a(SwiftRecordPlugin.o)
...
"_swift_FORCE_LOAD$_swiftQuartzCore", referenced from:
_swift_FORCE_LOAD$swiftQuartzCore$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftQuartzCore$_record)
"(extension in Foundation):Swift.Dictionary._bridgeToObjectiveC() -> __C.NSDictionary",
referenced from:
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"swift_isaMask", referenced from:
key path getter for record.SwiftRecordPlugin.isRecording : Swift.Bool :
record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
key path setter for record.SwiftRecordPlugin.isRecording : Swift.Bool :
record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
key path getter for record.SwiftRecordPlugin.hasPermission : Swift.Bool :
record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
key path setter for record.SwiftRecordPlugin.hasPermission : Swift.Bool :
record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
key path getter for record.SwiftRecordPlugin.audioRecorder : __C.AVAudioRecorder? :
record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
key path setter for record.SwiftRecordPlugin.audioRecorder : __C.AVAudioRecorder? :
record.SwiftRecordPlugin in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
...
"associated type descriptor for Swift.RawRepresentable.RawValue", referenced from:
l_got.$s8RawValueSYTl in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet< where A.RawValue:
Swift.FixedWidthInteger>.formIntersection(A) -> ()", referenced from:
protocol witness for Swift.SetAlgebra.formIntersection(A) -> () in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.formIntersection(A) -> () in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.isDisjoint(with: A) -> Swift.Bool", referenced from:
protocol witness for Swift.SetAlgebra.isDisjoint(with: A) -> Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.isDisjoint(with: A) -> Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"base conformance descriptor for Swift.SetAlgebra: Swift.Equatable", referenced from:
l_got.$ss10SetAlgebraPSQTb in librecord.a(SwiftRecordPlugin.o)
"_swift_unknownObjectRetain", referenced from:
@objc static record.SwiftRecordPlugin.register(with: __C.FlutterPluginRegistrar) -> ()
in librecord.a(SwiftRecordPlugin.o)
"(extension in Foundation):Swift.String._bridgeToObjectiveC() -> __C.NSString", referenced
from:
@nonobjc __C.FlutterMethodChannel.__allocating_init(name: Swift.String,
binaryMessenger: __C.FlutterBinaryMessenger) -> __C.FlutterMethodChannel in
librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.FlutterError.__allocating_init(code: Swift.String, message: Swift.String?,
details: Any?) -> __C.FlutterError in librecord.a(SwiftRecordPlugin.o)
"_swift_getObjCClassMetadata", referenced from:
type metadata accessor for __C.FlutterMethodChannel in librecord.a(SwiftRecordPlugin.o)
@objc static record.SwiftRecordPlugin.register(with: __C.FlutterPluginRegistrar) -> ()
in librecord.a(SwiftRecordPlugin.o)
type metadata accessor for __C.NSObject in librecord.a(SwiftRecordPlugin.o)
type metadata accessor for __C.FlutterError in librecord.a(SwiftRecordPlugin.o)
type metadata accessor for __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
type metadata accessor for __C.NSError in librecord.a(SwiftRecordPlugin.o)
type metadata accessor for __C.OS_dispatch_queue in librecord.a(SwiftRecordPlugin.o)
...
"Swift.convertInOutToPointerArgument(Builtin.RawPointer) -> A",
referenced from:
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"type metadata for Swift.String", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
"type metadata accessor for Swift.AutoreleasingUnsafeMutablePointer", referenced from:
type metadata accessor for Swift.AutoreleasingUnsafeMutablePointer<__C.NSError?> in
librecord.a(SwiftRecordPlugin.o)
"swift_bridgeObjectRelease", referenced from:
@nonobjc __C.FlutterMethodChannel.__allocating_init(name: Swift.String,
binaryMessenger: __C.FlutterBinaryMessenger) -> __C.FlutterMethodChannel in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.AVAudioRecorder.init(url: Foundation.URL, settings: [Swift.String : Any])
throws -> __C.AVAudioRecorder in librecord.a(SwiftRecordPlugin.o)
@nonobjc __C.FlutterError.__allocating_init(code: Swift.String, message: Swift.String?,
details: Any?) -> __C.FlutterError in librecord.a(SwiftRecordPlugin.o)
outlined destroy of Swift.String in librecord.a(SwiftRecordPlugin.o)
"_swift_FORCE_LOAD$_swiftCoreFoundation", referenced from:
_swift_FORCE_LOAD$swiftCoreFoundation$_record in librecord.a(SwiftRecordPlugin.o)
(maybe you meant: _swift_FORCE_LOAD$swiftCoreFoundation$_record)
"method descriptor for Swift.SetAlgebra.contains(A.Element) -> Swift.Bool", referenced
from:
l_got.$ss10SetAlgebraP8containsySb7ElementQzFTq in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.isSuperset(of: A) -> Swift.Bool", referenced from:
protocol witness for Swift.SetAlgebra.isSuperset(of: A) -> Swift.Bool in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.isSuperset(of: A) -> Swift.Bool in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.formSymmetricDifference(__owned A) -> ()",
referenced from:
l_got.$ss10SetAlgebraP23formSymmetricDifferenceyyxnFTq in
librecord.a(SwiftRecordPlugin.o)
"Swift.String.init(builtinStringLiteral: Builtin.RawPointer, utf8CodeUnitCount:
Builtin.Word, isASCII: Builtin.Int1) -> Swift.String", referenced from:
static record.SwiftRecordPlugin.register(with: __C.FlutterPluginRegistrar) -> () in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"_swift_beginAccess", referenced from:
record.SwiftRecordPlugin.isRecording.getter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.isRecording.setter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.isRecording.modify : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.hasPermission.getter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.hasPermission.setter : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.hasPermission.modify : Swift.Bool in
librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.audioRecorder.getter : __C.AVAudioRecorder? in
librecord.a(SwiftRecordPlugin.o)
...
"_swift_unknownObjectUnownedLoadStrong", referenced from:
closure #1 () -> () in closure #1 (Swift.Bool) -> () in
record.SwiftRecordPlugin.(hasPermission in _3128433EDB1AEB6090299F7BC8F33941)((Any?) ->
()) -> () in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.init<A where A1: Swift.Sequence, A.Element ==
A1.Element>(__owned A1) -> A", referenced from:
protocol witness for Swift.SetAlgebra.init<A where A1: Swift.Sequence, A.Element ==
A1.Element>(__owned A1) -> A in conformance __C.AVAudioSessionCategoryOptions :
Swift.SetAlgebra in __C_Synthesized in librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.init<A where A1: Swift.Sequence, A.Element ==
A1.Element>(__owned A1) -> A in conformance __C.AVAudioSessionSetActiveOptions :
Swift.SetAlgebra in __C_Synthesized in librecord.a(SwiftRecordPlugin.o)
"swift_allocObject", referenced from:
@objc record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ())
-> () in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(hasPermission in _3128433EDB1AEB6090299F7BC8F33941)((Any?) ->
()) -> () in librecord.a(SwiftRecordPlugin.o)
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.OptionSet.intersection(A) -> A", referenced from:
protocol witness for Swift.SetAlgebra.intersection(A) -> A in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.intersection(A) -> A in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"type metadata accessor for Dispatch.DispatchQoS", referenced from:
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
"Swift.assertionFailure(: Swift.StaticString, : Swift.StaticString, file:
Swift.StaticString, line: Swift.UInt, flags: Swift.UInt32) -> Swift.Never", referenced
from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"static Dispatch.DispatchQoS.unspecified.getter : Dispatch.DispatchQoS", referenced from:
default argument 1 of (extension in Dispatch):__C.OS_dispatch_queue.async(group:
__C.OS_dispatch_group?, qos: Dispatch.DispatchQoS, flags:
Dispatch.DispatchWorkItemFlags, execute: @convention(block) () -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
"swift_release", referenced from:
record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ()) -> ()
in librecord.a(SwiftRecordPlugin.o)
__swift_destroy_boxed_opaque_existential_0 in librecord.a(SwiftRecordPlugin.o)
@objc record.SwiftRecordPlugin.handle(
: __C.FlutterMethodCall, result: (Any?) -> ())
-> () in librecord.a(SwiftRecordPlugin.o)
record.SwiftRecordPlugin.(hasPermission in _3128433EDB1AEB6090299F7BC8F33941)((Any?) ->
()) -> () in librecord.a(SwiftRecordPlugin.o)
closure #1 (Swift.Bool) -> () in record.SwiftRecordPlugin.(hasPermission in
_3128433EDB1AEB6090299F7BC8F33941)((Any?) -> ()) -> () in
librecord.a(SwiftRecordPlugin.o)
reabstraction thunk helper from @escaping @callee_guaranteed () -> () to @escaping
@callee_unowned @convention(block) () -> () in librecord.a(SwiftRecordPlugin.o)
reabstraction thunk helper from @escaping @callee_guaranteed (@unowned Swift.Bool) ->
() to @escaping @callee_unowned @convention(block) (@unowned Swift.Bool) -> () in
librecord.a(SwiftRecordPlugin.o)
...
"method descriptor for Swift.SetAlgebra.formUnion(__owned A) -> ()", referenced from:
l_got.$ss10SetAlgebraP9formUnionyyxnFTq in librecord.a(SwiftRecordPlugin.o)
"(extension in Swift):Swift.SetAlgebra.subtract(A) -> ()", referenced from:
protocol witness for Swift.SetAlgebra.subtract(A) -> () in conformance
__C.AVAudioSessionCategoryOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
protocol witness for Swift.SetAlgebra.subtract(A) -> () in conformance
__C.AVAudioSessionSetActiveOptions : Swift.SetAlgebra in __C_Synthesized in
librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.RawRepresentable.init(rawValue: A.RawValue) -> A?", referenced
from:
l_got.$sSY8rawValuexSg03RawB0Qz_tcfCTq in librecord.a(SwiftRecordPlugin.o)
"_swift_errorRetain", referenced from:
record.SwiftRecordPlugin.(start in _3128433EDB1AEB6090299F7BC8F33941)(path:
Swift.String, encoder: Swift.Int, bitRate: Swift.Int, samplingRate: Swift.Float,
result: (Any?) -> ()) -> () in librecord.a(SwiftRecordPlugin.o)
"method descriptor for Swift.SetAlgebra.isSuperset(of: A) -> Swift.Bool", referenced from:
l_got.$ss10SetAlgebraP10isSuperset2ofSbx_tFTq in librecord.a(SwiftRecordPlugin.o)
"_swift_getObjectType", referenced from:
static record.SwiftRecordPlugin.register(with: __C.FlutterPluginRegistrar) -> () in
librecord.a(SwiftRecordPlugin.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
note: Using new build system
note: Building targets in parallel
note: Planning build
note: Constructing build description

Could not build the precompiled application for the device.

Error launching application on iPhone.

Required feature

I believe that the strength of this plugin is simplicity and essentiality, thanks.
But I wonder if it is possible to add the pause function in the recording, so as not to have to start another file every time?
Second feature that I think can make the plugin more complete is to provide access to audio level metering properties average power peak power.
Thanks again for your work

iOS - Resume record issue after lock iPhone device or simulator

I have used SystemChannels.lifecycle.setMessageHandler method to get Phone OS App Lifecycle state

When iPhone lock onPause called and I have user pause method to pause audio recording but when I unlock screen and call resume method it will only give recording before Lock Screen happened.

Example :

  1. Record 4 sec audio and than lock device
  2. Unlock device resume recording upto 10 sec
  3. Stop Recording on 10 sec
  4. It only gives 4 sec audio recorded file as source.

Please help me out.

record issue on second time

When i record start and stop then check the record file it works perfect but when i again want to record with same name and path then it did replace with previous one but when i want to play it did not play it suppose my file path is 'directory.path/myfile.mp3' first time record file perfect after again record same name it replace but not played. kindly look into this matter what issue is even i delete directory but still facing this issue.

             var dir= await getExternalStorageDirectory();

// for start record

           await Record().start(
                    path: '${dir!.path}/myFile.m4a', // required
                    encoder: AudioEncoder.AAC, // by default
                    bitRate: 128000, // by default
                    samplingRate: 44100, // by default
                  );

//for stop record

        var value =await Record().stop();

// for delete file

         var file = File('${dir.path}/myFile.m4a');
                  if(await file.exists()){
                    await file.delete();
                    dir.delete();

                  }

Not working in iOS

Record is not working in iOS but same is working fine in Android. Permissions has been added. Audio Encoder used is AAC and bitrate, samplingrate are default values. Anyone encountered issue with iOS?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.