Giter Club home page Giter Club logo

audioplayers's People

Contributors

afsar-pasha avatar anleac avatar bardiarastin avatar beerline13 avatar captnplanet avatar craigomac avatar danielr2001 avatar doppelledev avatar dsyrstad avatar erickzanardo avatar erickzanardo-dx avatar fdietze avatar feroult avatar fzyzcjy avatar gustl22 avatar hugoheneault avatar jeffmikels avatar koji-1009 avatar luanpotter avatar magodo avatar nmazidi avatar oakes avatar operkh avatar proteye avatar ralph-bergmann avatar rob-patchett avatar saeed-golshan avatar spydon avatar subhash279 avatar vadympinchuk 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  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

audioplayers's Issues

How to get state playing, pause , stop on current Player

Thanks for your nice package!

I would like to ask you a question ,

I use video_player package then can get state well . But it don't work on background when device locked screen.

In video_player package
#VideoPlayerController _controller

-_controller.value.initialized
-_controller.value.isPlaying
-_controller.value.current

How about your package? Because I'm can not see in the document.

Thanks

Will not build with Dart 2.1.0

I've just updated to the newest flutter release (dev). Now I get this:

The current Dart SDK version is 2.1.0-dev.0.0.flutter-be6309690f.

Because ... depends on audioplayers >=0.2.0 which requires SDK version >=1.8.0 <2.0.0 or >=2.0.0-dev.50.0 <2.0.0, version solving failed.
pub get failed (1)

Audioplayer doesn't start

Hello,

I have a problem with audioplayer. It doesn't start playing and calls onComplete callback right away.

Here is log, if it helps:

Launching lib\main.dart on GT I9195 in debug mode...
C:\Users\david\AppData\Roaming\Pub\Cache\hosted\pub.dartlang.org\audioplayers-0.7.3\android\src\main\java\xyz\luan\audioplayers\WrappedMediaPlayer.java:204: warning: [deprecation] setAudioStreamType(int) in MediaPlayer has been deprecated
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
^
1 warning
Built build\app\outputs\apk\debug\app-debug.apk.
I/FlutterActivityDelegate(25121): onResume setting current activity to this
I/Choreographer(25121): Skipped 94 frames! The application may be doing too much work on its main thread.
E/dalvikvm(25121): Could not find class 'android.media.AudioAttributes$Builder', referenced from method xyz.luan.audioplayers.WrappedMediaPlayer.createPlayer
W/dalvikvm(25121): VFY: unable to resolve new-instance 38 (Landroid/media/AudioAttributes$Builder;) in Lxyz/luan/audioplayers/WrappedMediaPlayer;
D/dalvikvm(25121): VFY: replacing opcode 0x22 at 0x0012
D/dalvikvm(25121): DexOpt: unable to opt direct call 0x004e at 0x14 in Lxyz/luan/audioplayers/WrappedMediaPlayer;.createPlayer
V/MediaPlayer-JNI(25121): native_setup
V/MediaPlayer(25121): constructor
V/MediaPlayer(25121): setListener
V/MediaPlayer-JNI(25121): setAudioStreamType: 3
V/MediaPlayer(25121): MediaPlayer::setAudioStreamType
V/MediaPlayer-JNI(25121): setVolume: left 1.000000 right 1.000000
V/MediaPlayer(25121): MediaPlayer::setVolume(1.000000, 1.000000)
V/MediaPlayer-JNI(25121): setLooping: 0
V/MediaPlayer(25121): MediaPlayer::setLooping
V/MediaPlayer(25121): message received msg=8, ext1=0, ext2=0
V/MediaPlayer(25121): notify(8, 0, 0) callback on disconnected mediaplayer
V/MediaPlayer-JNI(25121): setVolume: left 1.000000 right 1.000000
V/MediaPlayer(25121): MediaPlayer::setVolume(1.000000, 1.000000)
V/MediaPlayer-JNI(25121): setLooping: 0
V/MediaPlayer(25121): MediaPlayer::setLooping
V/MediaPlayer(25121): setVideoSurfaceTexture
V/MediaPlayer(25121): prepareAsync
V/MediaPlayer(25121): message received msg=100, ext1=1, ext2=-1004
E/MediaPlayer(25121): error (1, -1004)
V/MediaPlayer(25121): callback application
V/MediaPlayer(25121): back from callback
E/MediaPlayer(25121): Error (1,-1004)
V/MediaPlayer-JNI(25121): stop
V/MediaPlayer(25121): stop
E/MediaPlayer(25121): stop called in state 0
V/MediaPlayer(25121): message received msg=100, ext1=-38, ext2=0
E/MediaPlayer(25121): error (-38, 0)
V/MediaPlayer(25121): callback application
V/MediaPlayer(25121): back from callback
V/MediaPlayer-JNI(25121): reset
V/MediaPlayer(25121): reset
V/MediaPlayer(25121): message received msg=8, ext1=0, ext2=0
V/MediaPlayer(25121): notify(8, 0, 0) callback on disconnected mediaplayer
V/MediaPlayer-JNI(25121): release
V/MediaPlayer(25121): setListener
V/MediaPlayer(25121): disconnect
V/MediaPlayer(25121): destructor
V/MediaPlayer(25121): disconnect
I/flutter (25121): _platformCallHandler call audio.onComplete {value: true, playerId: 4e53b7f9-5f74-4001-bce7-bb3e666b6332}
V/MediaPlayer-JNI(25121): native_setup
V/MediaPlayer(25121): constructor
V/MediaPlayer(25121): setListener
V/MediaPlayer-JNI(25121): setAudioStreamType: 3
V/MediaPlayer(25121): MediaPlayer::setAudioStreamType
V/MediaPlayer-JNI(25121): setVolume: left 1.000000 right 1.000000
V/MediaPlayer(25121): MediaPlayer::setVolume(1.000000, 1.000000)
V/MediaPlayer-JNI(25121): setLooping: 0
V/MediaPlayer(25121): MediaPlayer::setLooping
V/MediaPlayer(25121): message received msg=8, ext1=0, ext2=0
V/MediaPlayer(25121): notify(8, 0, 0) callback on disconnected mediaplayer
V/MediaPlayer(25121): setVideoSurfaceTexture
V/MediaPlayer(25121): prepareAsync
V/MediaPlayer(25121): message received msg=100, ext1=1, ext2=-1004
E/MediaPlayer(25121): error (1, -1004)
V/MediaPlayer(25121): callback application
V/MediaPlayer(25121): back from callback
E/MediaPlayer(25121): Error (1,-1004)
V/MediaPlayer-JNI(25121): stop
V/MediaPlayer(25121): stop
E/MediaPlayer(25121): stop called in state 0
V/MediaPlayer(25121): message received msg=100, ext1=-38, ext2=0
E/MediaPlayer(25121): error (-38, 0)
V/MediaPlayer(25121): callback application
V/MediaPlayer(25121): back from callback
V/MediaPlayer-JNI(25121): reset
V/MediaPlayer(25121): reset
V/MediaPlayer(25121): message received msg=8, ext1=0, ext2=0
V/MediaPlayer(25121): notify(8, 0, 0) callback on disconnected mediaplayer
V/MediaPlayer-JNI(25121): release
V/MediaPlayer(25121): setListener
V/MediaPlayer(25121): disconnect
V/MediaPlayer(25121): destructor
V/MediaPlayer(25121): disconnect
I/flutter (25121): _platformCallHandler call audio.onComplete {value: true, playerId: 4e53b7f9-5f74-4001-bce7-bb3e666b6332}

Add ability to play audio through notifications channel

On iOS when playing music in the background from any other app (Spotify for example) the music stops when you play some audio through this plugin and it doesn't resume when finished.

When using this plugin as a music player that is absolutely fine but when using it to play motivational audio clips (similar to Strava's pace time updates etc) it doesn't really work since Spotify (in this case) will pause.

I come from a native Android developer background so the code is a little foreign to me but if there is such a thing as being able to treat the audio as a 'notification' instead of 'music' for iOS that would be a nice addition.

I understand this may not be the purpose this plugin was designed, just hoping you are open to the idea!

loop

Android's media player allows looping the audio with:

mediaPlayer.setLooping(true);

It would be nice if you could integrate this functionality.

Incorporate Flame's Audio functionalities

Flame's audio class allows for some neat methods for playing resource audio files. It'd be very useful to actually import that behavior to audioplayers itself, and just use it on flame, because this is really useful to all applications (not just games).

The relevant code is this:

  Future<File> _fetchToMemory(String fileName) async {
    final file = new File('${(await getTemporaryDirectory()).path}/$fileName');
    return await file
        .writeAsBytes((await _fetchAsset(fileName)).buffer.asUint8List());
  }

It's loading a resource into a tmp folder in the device file system, which is then used with the isLocal flag to play.

Basically we should have 3 kinds of sources:

  • local file on the user device
  • resource file
  • remote url (over network)

And it'd be good to make it more clear in the documentation what kinds are available and what they mean.

Also, maybe we could support in memory streams? Just a thought.

completionHandler is not called in iOS background mode

I'm trying to write an iOS app to as a music player:
When a song finishes playing, my completionHandler will be called, and it will set a new song.

It works well when the app is in foreground.
But in background, completionHandler won't be called.

How to fix the problem?

Objective-C or Swift?

Is it now possible to remove the swift dependency on this? I'm getting some errors when using this alongside Firebase plugins.

No AudioPlayerState?

The old package had a way to indicate if the player was playing. What's the reasoning behind removing it?

Spatial or Stereo Control for audio

Suggestion: to add a function to audioplayer to be able to control the balance of sound (left vs right) with simple values from -1 (left) to 1 (right). Where is the correct place to look to add the changes?

  • Linux
  • Windows
  • Android
  • Web
  • iOS
  • macOS

iOS: AudioCache doesn't play

I'm using AudioCache to play a small sound effect when a particular widget loads. This works on Android but no sound is produced on iOS.

The logs (with debugging on) actually show that a sound is being played (or at least I think that is what the logs say):

iOS => call play, playerId c0c5f653-24e0-410b-9b7d-819b9e93f824
play!
isLocal: 1 1
volume: 1.000000 1
setUrl /var/mobile/Containers/Data/Application/398C4AF5-447B-4BA5-8652-4EF82010AE54/Library/Caches/bell.mp3
ios -> onTimeInterval...
asdff c0c5f653-24e0-410b-9b7d-819b9e93f824 - 0
asdff end
<snip>

The relevant code:

class Sheep extends StatelessWidget {
  static AudioCache player = AudioCache(prefix: 'sounds/');
  
  @override
  Widget build(BuildContext context) {
    player.play('bell.mp3');

    // some other widget building stuff eventually returning a widget
  }
}

Log file: https://pastebin.com/FTUCMd8W

audioplayer version 0.7.5
iOS version 11.4.1
Flutter 0.5.1 • channel beta • https://github.com/flutter/flutter.git
Framework • revision c7ea3ca377 (3 months ago) • 2018-05-29 21:07:33 +0200
Engine • revision 1ed25ca7b7
Tools • Dart 2.0.0-dev.58.0.flutter-f981f09760

Volume controls

I just realized issues were not available because you need to turn them manually on a fork! Sorry, everyone!

Paul has made an awesome fork to allow volume controls! That's very important to flame, thanks, man!

I'd like to pull request you in, but now we are working on iOS as well. I know it's a hassle, I myself have no iDevices to test with. Would you be able to patch the swift code as well? Then we can merge!

(I'm creating this issue here because @pauldemarco hasn't enabled issues in his fork either (dang it, GitHub!).

Android: Should reconnect to platform audioplayer on app resume.

On iOS, the audioplayer class can correctly reconnect to the platform audio player, but on Android, it does not.

To reproduce this issue:

  • Launch an app with an audioplayer instance and start the playback.
  • Use the "back" button to exit out of the app (background audio continues)
  • Start the app again.

RESULT: A second audioplayer instance will be created and a second audio stream will begin. The only way to stop the previous audio player is to us the Android System methods to kill or fully dismiss the app.

Headphone Bug / Background Audio Problems

Using 0.7.8, I'm still having problems with audio playing only when headphones are plugged in and not playing while the screen is off.

Specifically, the problem shows up when I kill the app and launch it a second time. OR if I install a second app that uses this plugin. The second app, or the second launch and all subsequent app launches refuse to play audio except through the headphones and background audio no longer works. Nothing with this plugin will play audio until all apps using this plugin are uninstalled, and one is installed again.

What's happening here?

durationHandler is not called after setUrl()

hi.

its very common use-case to get the file duration of a local file without playing it first.
I would like to call setUrl() for local files and immediately have the durationHandler invoked.
current situation is that only when I call play(isLocal:true) than the handler would get invoked.

can you help me with that?
thanks
m

Error building for iOS

flutter run
Launching lib/main.dart on iPhone XS Max in debug mode...
Starting Xcode build...
Xcode build done.                                            1.5s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **

Xcode's output:
↳
    === BUILD TARGET audioplayers OF PROJECT Pods WITH CONFIGURATION Debug ===
    In file included from /Users/martflu/.pub-cache/hosted/pub.dartlang.org/path_provider-0.4.1/ios/Classes/PathProviderPlugin.m:5:
    /Users/martflu/.pub-cache/hosted/pub.dartlang.org/path_provider-0.4.1/ios/Classes/PathProviderPlugin.h:5:9: fatal error: 'Flutter/Flutter.h' file not found
    #import <Flutter/Flutter.h>
            ^~~~~~~~~~~~~~~~~~~
    1 error generated.

AFAIK this might not be related to the audioplayers library. I found and read through similar issues but none of the suggested solutions worked for me.
Submitting the issue here first since somebody who wants this to work on iOS might also run into this issue.

Playing different local files crashes iOS

Playing multiple files works on Android, but playing a second file crashes iOS with no warning.

Playing the same file multiple times works on iOS. I've just tested with "audioplayer" and it works with different files on iOS, but I would like to use your volume feature.

Readme Documentation for playLocal example incorrect

The playLocal() example in README.md is exactly the same as the play() example. It should be:
final result = await audioPlayer.play(localFilePath, isLocal: true);
I realize this is an exact copy from the original source, which is still also in error. Not sure who I should be correcting, but I think this is the repo I expect to use, so.... :)

Trying to play AudioStream

I'm trying to play audiostream with audioplayers, and everything is ok in android emulator, but when Im trying to test it on device i get those errors:
E/ExtMediaPlayer-JNI(11346): env->IsInstanceOf fails E/MediaPlayer-JNI(11346): JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 E/ExtMediaPlayer-JNI(11346): env->IsInstanceOf fails E/MediaPlayer-JNI(11346): JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 D/MediaHTTPConnection(11346): filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 6.0.1) D/MediaHTTPConnection(11346): proxy null port 0
BUT after about 10-20 seconds my stream starts playing.
How to fix it?

Sound only playing through headphones

Does anyone know why this might be happening? I have tried to use this package on multiple ios devices and the sound only plays if there are headphones attached. Works fine on android. Is this some sort of permissions issue?

【Bug】Failed on iOS simulator when trying remote audio url

I've tried successfully local file using AudioCache but failed when trying remote audio url. And when I enable the log function, I got this 【error info】:

_platformCallHandler call audio.onError {playerId: 6d0cadd3-8420-4f8a-a05b-14e0c0d8af54, value: AVPlayerItemStatus.failed}

AudioCache player playing previous cached files, surround echo sound

I am using following method when a button is pressed,

AudioCache player = AudioCache(prefix: "audio/"); // this is member variable

void _playFile() {
  player.clearCache();
  player.play("myFile.mp3");
}

When I hit button say 5 times, I can hear the surrounded echo sound that means the player is still playing previous files, where it is supposed to only play fresh files. Am I doing something wrong?

Dart 2 support?

I'm getting errors with Flutter beta 2, which uses Dart 2.
I tried running it with flutter run --no-preview-dart-2 and it worked.
Here's the error, with beta 2 and Dart 2.
type 'Future<dynamic>' is not a subtype of type 'Future<int>'
Location:

  Future<int> play(String url, {bool isLocal: false, double volume: 1.0}) =>
      _channel.invokeMethod('play', {"playerId": playerId, "url": url, "isLocal": isLocal, 'volume': volume});

in audioplayer.dart
Running flame_example
Well, here's a screenshot from VS Code:
upload

The line in which the error is found is Flame.audio.loop('music.ogg');

Plugin dosen't resolve dependancies with flutter version higher than 0.5.x

Looks like flutter has shifted their included version of dart to 2.1.0 which prevents the dependency for this plugin from begin resolved.

I've reverted my flutter to 0.5.1 by running this call in the flutter directory;
git checkout v0.5.1
then running flutter packages pub get

I can get the actual error message if it helps but you can reproduce this by calling flutter upgrade and then trying to build a project which depends on audioplayers.

The flutter team also have an issue open here;
flutter/flutter#20885
which describes the issue and a solution

Disable logs should disable native logs as well

Current the disable logs method disables logs only for the dart code; it could call a backend method through the channel in order to disable the android/swift logs as well, as those are not normally necessary and can pollute the output.

Alternatively, use a better logging scheme (find out how dart/flutter should handle this).

sound goes off when screen off or app minimised

Hey guys my issue is that when I press the home button to send app in background(without terminating it) or lock screen, audio stops. On unlocking screen or on bring it to the front makes it play again. Any suggestions?

Thanks in advance :)

Support HLS on Android

On Android, when I try playing an HLS .m3u8 file, I get the following error:

Exception has occurred.
PlatformException(error, Unsupported value: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.seekTo(int)' on a null object reference, null)

Firebase AdMob + AudioPlayers duplicate symbol error

Hi there,

I've been messing around with this for a few hours now trying to fix this issue, but i've noticed that when both Firebase AdMob (firebase_admob: ^0.5.7) and AudioPlayers (audioplayers: ^0.7.5) are both installed - when building to run, i get the following error:

=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
duplicate symbol __channel in:
/Users/k/Development/mobile/app/build/ios/Debug-iphonesimulator/audioplayers/libaudioplayers.a(AudioplayersPlugin.o)
/Users/k/Development/mobile/app/build/ios/Debug-iphonesimulator/firebase_admob/libfirebase_admob.a(FLTMobileAd.o)
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Could not build the application for the simulator.
Error launching application on iPhone X.
Exited (sigterm)

It's worth noting that i have also tried the inverse - i removed Firebase AdMob and left in AudioPlayers - and everything builds as expected. It appears that __channel is to blame here, but i'm unsure where to find this variable / symbol so i could possibly test a change to it.

FYI here's my Flutter Doctor report:

[✓] Flutter (Channel master, v0.7.2-pre.18, on Mac OS X 10.13.6 17G65, locale en-GB)
[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 9.4.1)
[✓] Android Studio (version 3.1)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] VS Code (version 1.25.1)
[✓] Connected devices (1 available)

! Doctor found issues in 1 category.

I've tried upgrading all Firebase packages, flutter clean, i've also reinstalled Flutter just incase.

Any direction or help on the matter would be greatly appreciated.

Improve Performance

As per discussed here, there is a performance impact when playing sounds at a really fast rate (like 2 per second). We need to take a look at what's causing this.

MissingPluginException (No implementation found for method play ...)

I have other plugins installed and even some custom ones with no issue, but this one constantly throws:

MissingPluginException(No implementation found for method play on channel xyz.luan/audioplayers)

I have tried:

  • removing and reinstalling
  • making sure to run flutter build ios
  • Development Pods are all public
  • XCODE is not complaining about plugin it missing
  • making sure to use audioplayers: ^0.7.5 in the pubspec
  • instantiated right using AudioPlayer audioPlayer = new AudioPlayer();
  • flutter info up to date: [✓] Flutter (Channel dev, v0.8.2, on Mac OS X 10.13.6 17G65, locale en-US)

What am I missing?

Resource leak?

Using AudioCache player to repeatedly play a sound effect in a game-like app. on iOS, after a large number of plays, the sound disappears, and the whole app comes to a screeching halt, and then crashes. Looks like some sort of resource leak that gets accumulated over time.

lag streaming AACP source

Hi, i was trying this plugins with some .mp3 streaming sources ... everything i ok, but i have a litle problem with AACP streaming sources, every time I play this type of sources i need to wait like 1 minut and it start the stream, how to solve this? (sorry my english)

[ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception: E/flutter ( 2586): MissingPluginException(No implementation found for method play on channel xyz.luan/audioplayers) E/flutter ( 2586): #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:291:7) E/flutter ( 2586): <asynchronous suspension> E/flutter ( 2586): #1 AudioPlayer._invokeMethod (package:audioplayers/audioplayers.dart:80:10) E/flutter ( 2586): #2 AudioPlayer.play (package:audioplayers/audioplayers.dart:86:12) E/flutter ( 2586): #3 VoicePlayer.playReceiveSound (package:tunnel/utils/voice_utils.dart:47:17)

 [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 2586): MissingPluginException(No implementation found for method play on channel xyz.luan/audioplayers)
E/flutter ( 2586): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:291:7)
E/flutter ( 2586): <asynchronous suspension>
E/flutter ( 2586): #1      AudioPlayer._invokeMethod (package:audioplayers/audioplayers.dart:80:10)
E/flutter ( 2586): #2      AudioPlayer.play (package:audioplayers/audioplayers.dart:86:12)
E/flutter ( 2586): #3      VoicePlayer.playReceiveSound (package:tunnel/utils/voice_utils.dart:47:17)

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.