Giter Site home page Giter Site logo

androidaudioconverter's Introduction

Android Arsenal Release

AndroidAudioConverter

Convert audio files inside your Android app easily. This is a wrapper of FFmpeg-Android-Java lib.

Supported formats:

  • AAC
  • MP3
  • M4A
  • WMA
  • WAV
  • FLAC

Lib size: ~9mb

How To Use

1 - Add this permission into your AndroidManifest.xml and request in Android 6.0+

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2 - Load the lib inside your Application class

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        AndroidAudioConverter.load(this, new ILoadCallback() {
            @Override
            public void onSuccess() {
                // Great!
            }
            @Override
            public void onFailure(Exception error) {
                // FFmpeg is not supported by device
            }
        });
    }
}

3 - Convert audio files async

File flacFile = new File(Environment.getExternalStorageDirectory(), "my_audio.flac");
IConvertCallback callback = new IConvertCallback() {
    @Override
    public void onSuccess(File convertedFile) {
        // So fast? Love it!
    }
    @Override
    public void onFailure(Exception error) {
        // Oops! Something went wrong
    }
};
AndroidAudioConverter.with(this)
    // Your current audio file
    .setFile(flacFile)  
    
    // Your desired audio format 
    .setFormat(AudioFormat.MP3)
    
    // An callback to know when conversion is finished
    .setCallback(callback)
    
    // Start conversion
    .convert();

Import to your project

Put this into your app/build.gradle:

repositories {
  maven {
    url "https://jitpack.io"
  }
}

dependencies {
  compile 'com.github.adrielcafe:AndroidAudioConverter:0.0.8'
}

Dependencies

Want to RECORD AUDIO into your app?

Take a look at AndroidAudioRecorder! Example of usage here.

License

The MIT License (MIT)

Copyright (c) 2016 Adriel Café

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

androidaudioconverter's People

Contributors

adrielcafe 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  avatar  avatar  avatar

androidaudioconverter's Issues

cannot able to customise bit rate

I cannot able to set required bit rate when converting audio file into wav file. Default bit rate of converted wav file is 256 kbps. How to set bit rate to our requirement?

how import AndroidAudioConverter & IConvertCallback?

how import AndroidAudioConverter & IConvertCallback?

if import cafe.adriel.androidaudioconverter;
then will get a lot error as follows :
MainActivity.java:27: 错误: 找不到符号
import cafe.adriel.androidaudioconverter;
^
符号: 类 androidaudioconverter
位置: 程序包 cafe.adriel

AndroidAudioConverter.load(this, new ILoadCallback() {
^
符号: 类 ILoadCallback
位置: 类 MainActivity
...

64bit compatibility

With the new play store requirement of 64 bit, my app no continue to upload because I only generete the 32bit .so from this library, could you give me any light or advise to generete a arm64-v8a version in the apk, or if this is 64 bit compatible. Thanks

Dependency is not resolved

Here are the logs

Could not find com.github.adrielcafe:ffmpeg-android-java:2a627f6ecd.
Required by:
project :app > com.github.adrielcafe:AndroidAudioConverter:0.0.8

     Suggestion tried :
     
     1: Added dependency at the app module level and maven URL 'https://jitpack.io'   at the module level.
     2: Added dependency at the app module level and maven URL 'https://jitpack.io'   at the app level.
     
     
     Nothing works. 
     
     Any suggestion how to fix it?

Problem with conversion: nothing happens

Hi there,

I have implemented this project with Android and for some reason it does not seem to be working. It says conversion starting, but doesn't ever do anything past this.

I am using the following code:

IConvertCallback myCallback = new IConvertCallback() {

            @Override
            public void onSuccess(File convertedFile) {
                Toast.makeText(MainActivity.this, "SUCCESS: " + convertedFile.getPath(), Toast.LENGTH_LONG).show();
            }

            @Override
            public void onFailure(Exception error) {
                Toast.makeText(MainActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show();
            }
        };
        Toast.makeText(this, "Converting audio file...", Toast.LENGTH_SHORT).show();
        AndroidAudioConverter.with(this).setFile(source).setFormat(AudioFormat.MP3).setCallback(myCallback).convert();

The callback does not trigger for success. When I artificially set the encoder to access something that is not there it will trigger and print "ERROR." But when I set it to something that I know is there, nothing happens. It does not successfully convert (I am checking with the file explorer) and does not print any further messages. Any idea what is causing this?

Error. error=13, Permission denied in Android Q(10)

The targetSdkVersion<=28 used in the development project before, the audio conversion is normal. Later, I changed targetSdkVersion=29, and running the project found that AMR conversion to MP3 failed.
The exception message:
java.io.IOException: Cannot run program "/data/user/0/package name/files/ffmpeg": error=13, Permission denied,
Please help me with the author and developers. thank you all.

Convert pcm

Hi, im recording audio track in android with AudioRecord object instance.
sample rate = 16 000,
channel config = mono_in
format = ENCODING_PCM_16BIT

I tried to convert recorded file into aac, m4a, flac.
Every time conversion is failed.
Is it actually possible to convert from poor pcm?
P.S. recorded file extension *.pcm (tried *.ogg)

error=13, Permission denied (Android Q)

Android Q has introduced some breaking changes with folder/file permissions. I get the following error when using the converter on Android:

java.io.IOException: Cannot run program "/data/user/0/com.ltcfastpay.timecard.debug/files/ffmpeg": error=13, Permission denied

I had the same problem with the AndroidAudioRecorder and found that the following method of getting the file path was deprecated in Android Q:

Environment.getExternalStorageDirectory().getPath()
To fix I had to change this to:

this.getActivity().getFilesDir().getAbsolutePath()

So now I am able to record and save as wav but when I try to convert to mp3 I get the permission denied.

I have tried to make changes to the AndroidAudioConverter.java file but its locked in Android Studio which tells me that I probably should not be tampering with it.

Support RTL

hey @adrielcafe
i just use your awesome library for recording audio in my project
https://github.com/adrielcafe/AndroidAudioRecorder
but it save file with m4a extension
when try to use Audio Converter
it stop rtl support
so can i save record audio with any extension?
or
any way to fix rtl support in this library?
and another question please
is there anyway to can compress sound file ...?
thanks for all

Very slow

Something bad with codecs included.
Converting WAV -> AAC of 10sec-file takes 20 sec... Unacceptable.
Other solution (using android's MediaCodec & MediaMuxer) do same work in 0.5sec.

Not able to run audio

W/System.err: java.io.IOException: Prepare failed.: status=0x1
at android.media.MediaPlayer._prepare(Native Method)
at android.media.MediaPlayer.prepare(MediaPlayer.java:1300)
at cafe.adriel.androidaudiorecorder.AudioRecorderActivity.startPlaying(AudioRecorderActivity.java:335)
at cafe.adriel.androidaudiorecorder.AudioRecorderActivity.access$500(AudioRecorderActivity.java:33)
at cafe.adriel.androidaudiorecorder.AudioRecorderActivity$2.run(AudioRecorderActivity.java:237)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
W/System.err: at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Failed to load FFmpeg lib

Hi. I stumbled across this library and it looks very promising.

I added this to my application:

public class App extends application {
    @Override
    public void onCreate() {
        AndroidAudioConverter.load(this, new ILoadCallback() {
            @Override
            public void onSuccess() {
                android.util.Log.d(TAG, "FFmpeg is supported by the device. Succesfully loaded AndroidAudioConverter library.");
            }
            @Override
            public void onFailure(Exception error) {
                // FFmpeg is not supported by device
                Log.w(TAG, "FFmpeg is not supported by this device.", error);
            }
        });
    }
}

And got the following error:

W/Application: FFmpeg is not supported by this device.
    java.lang.Exception: Failed to loaded FFmpeg lib
        at cafe.adriel.androidaudioconverter.AndroidAudioConverter$1.onFailure(AndroidAudioConverter.java:50)
        at com.github.hiteshsondhi88.libffmpeg.FFmpegLoadLibraryAsyncTask.onPostExecute(FFmpegLoadLibraryAsyncTask.java:54)
        at com.github.hiteshsondhi88.libffmpeg.FFmpegLoadLibraryAsyncTask.onPostExecute(FFmpegLoadLibraryAsyncTask.java:8)
        at android.os.AsyncTask.finish(AsyncTask.java:771)
        at android.os.AsyncTask.access$900(AsyncTask.java:199)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

I then looked into the source code of your project and found that the load method does this:

try {
            FFmpeg.getInstance(context).loadBinary(new FFmpegLoadBinaryResponseHandler() {
                        @Override
                        public void onStart() {

                        }

                        @Override
                        public void onSuccess() {
                            loaded = true;
                            callback.onSuccess();
                        }

                        @Override
                        public void onFailure() {
                            loaded = false;
                            callback.onFailure(new Exception("Failed to loaded FFmpeg lib"));
                        }

                        @Override
                        public void onFinish() {

                        }
                    });
        } catch (Exception e){
            loaded = false;
            callback.onFailure(e);
        }
    }

So, I pasted that into my code and replaced catch (exception e) {...} with catch(exception e) {e.printStackTrace();.

I ran that and got the following error:

E/FFmpeg: issue in coping binary from assets to data. 
    java.io.FileNotFoundException: x86/ffmpeg
        at android.content.res.AssetManager.nativeOpenAsset(Native Method)
        at android.content.res.AssetManager.open(AssetManager.java:874)
        at android.content.res.AssetManager.open(AssetManager.java:851)
        at com.github.hiteshsondhi88.libffmpeg.FileUtils.copyBinaryFromAssetsToData(FileUtils.java:29)
        at com.github.hiteshsondhi88.libffmpeg.FFmpegLoadLibraryAsyncTask.doInBackground(FFmpegLoadLibraryAsyncTask.java:27)
        at com.github.hiteshsondhi88.libffmpeg.FFmpegLoadLibraryAsyncTask.doInBackground(FFmpegLoadLibraryAsyncTask.java:8)
        at android.os.AsyncTask$3.call(AsyncTask.java:394)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)

So this means that FFmpeg is not installed I guess?

I looked into the source code of the ffmpeg-android-java and found where the FFmpeg file should be located.
I ran:

System.out.println(this.getFilesDir() + File.separator + "ffmpeg");

And got as output:

I/System.out: /data/user/0/be.ksa.voetje/files/ffmpeg

I then ran

System.out.println(new File(this.getFilesDir() + File.separator + "ffmpeg").exists());

And got false, so the file does indeed not exist.

I'm unfamiliar with the FFmpeg library, so I really have no idea on what I should do now.
If you could help me with this one, that would be wonderful.

Thank you in advance.
Jonas

File converted is only of size 21KB

Hi,

I am trying to convert the file with following code

File flacFile = new File(filePath);
AndroidAudioConverter.with(context)
// Your current audio file
.setFile(flacFile)
// Your desired audio format
.setFormat(AudioFormat.MP3)
.setCallback(callback)
// Start conversion
.convert();

Before conversion file was of size 71 KB approx. and after converting file size reduced to 21 KB. Also recorded audio length is also decreased. Infact every file's size reduced to 21KB only .

Why is audio length reduced ?

Thanks in advance

Convert TS file to MP3

Hi,
Thanks for this awesome library , is it possible to convert TS files to MP3 ?
i'm struggling to find a way , can you please give a us source code or any help guide.
Regards

The problem with the converted file, if there are dots in the path to the original file

Hello, when I use the file located in the data folder of my application as the original audio file, it doesn’t work out very well (I’m talking about the location and name of the converted file).

I think this is designed for files with the extension and provided that there are no dots in the path to the original file, but in Android this happens very often.

The screenshot shows the whole debugging process and you can understand what is going wrong, I hope that fix it in the future.

P.S. it may be great if you allow me to set the location of the converted file to the user.

image

Error 13 Permission Denied

E/FFmpeg: Exception while trying to run: [Ljava.lang.String;@916ce87
    java.io.IOException: Cannot run program "/data/user/0/com.tuwy/files/ffmpeg": error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
        at java.lang.Runtime.exec(Runtime.java:698)
        at java.lang.Runtime.exec(Runtime.java:563)

I am running this app on android 10
with compile and target sdk version 29
I have already provided external storage permission and ' android:requestLegacyExternalStorage="true" '
Can any one suggest some thing ?

Unauthorized AndroiimplementationdAudioConverter:0.0.8

I just got this error when i try to access to the library, can somebody help me with this ?

> Could not resolve com.github.adrielcafe:AndroiimplementationdAudioConverter:0.0.8. > Could not get resource 'https://jitpack.io/com/github/adrielcafe/AndroiimplementationdAudioConverter/0.0.8/AndroiimplementationdAudioConverter-0.0.8.pom'. > Could not GET 'https://jitpack.io/com/github/adrielcafe/AndroiimplementationdAudioConverter/0.0.8/AndroiimplementationdAudioConverter-0.0.8.pom'. Received status code 401 from server: Unauthorized > Could not resolve com.github.adrielcafe:AndroiimplementationdAudioConverter:0.0.8. > Could not get resource 'https://jitpack.io/com/github/adrielcafe/AndroiimplementationdAudioConverter/0.0.8/AndroiimplementationdAudioConverter-0.0.8.pom'. > Could not GET 'https://jitpack.io/com/github/adrielcafe/AndroiimplementationdAudioConverter/0.0.8/AndroiimplementationdAudioConverter-0.0.8.pom'. Received status code 401 from server: Unauthorized

Permission denied error

I am using this code to convert my mp3 file in m4a because I want to merge audio and video files and using mp4parser library for this. But I red somewhere that mp4parser only works with m4a audio format. When executing this code I am getting this error "/data/user/0/com.jiviz.m4a: Permission denied".......My audio file is in string format..Log - V/Mux-------: ======/storage/emulated/0/DCIM/Jiviz_2021_02_01_07_15_33.mp4======/data/user/0/com.jiviz.app/files/songs/312mp3

public String mux(String videoFile, String audioFile) {
Log.v("Mux-------","======"+videoFile + "======"+audioFile);

    IConvertCallback callback = new IConvertCallback() {
        @Override
        public void onSuccess(File convertedFile) {
            Toast.makeText(CamRecorderActivity.this, "SUCCESS: " + convertedFile.getPath(), Toast.LENGTH_LONG).show();
        }
        @Override
        public void onFailure(Exception error) {
            Log.v("Conversion-------","======"+error.getMessage());
            Toast.makeText(CamRecorderActivity.this, "ERROR: " + error.getMessage(), Toast.LENGTH_LONG).show();
        }
    };
    Toast.makeText(this, "Converting audio file...", Toast.LENGTH_SHORT).show();
    AndroidAudioConverter.with(this)
            .setFile(new File(audioFile))
            .setFormat(AudioFormat.M4A)
            .setCallback(callback)
            .convert();

    Movie video = null;
    try {
        video = new MovieCreator().build(videoFile);
    } catch (RuntimeException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
    Movie audio = null;
    try {
        audio = new MovieCreator().build(audioFile);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } catch (NullPointerException e) {

        e.printStackTrace();
        return null;
    }
    int size = audio.getTracks().size();
    Track audioTrack = audio.getTracks().get((size - 1));
    video.addTrack(audioTrack);

    Container out = new DefaultMp4Builder().build(video);

    File myDirectory = new File(Environment.getExternalStorageDirectory(), "/Jiviz");
    if (!myDirectory.exists()) {
        myDirectory.mkdirs();
    }
    String filePath = myDirectory + "/video" + System.currentTimeMillis() + ".mp4";
    try {
        RandomAccessFile ram = new RandomAccessFile(String.format(filePath), "rw");
        FileChannel fc = ram.getChannel();
        out.writeContainer(fc);
        ram.close();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }

// File file = new File(filePath);
Log.v("Filepath-------","========" +filePath);
return filePath;
}

It's consume too much memory.

When we compile this dependency it's cover 10MB aprox. After configure this application size goes Dependency (10MB) +Application (5MB) = 15 MB.
Any Solution?

convert error

I use OmRecorder to record wav, use your library to converter it to mp3,but it error.

ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (GCC)
  configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
  libavutil      55. 17.103 / 55. 17.103
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[aac @ 0xad15b810] Format aac detected only with low score of 1, misdetection possible!
[aac @ 0xad15c280] Error decoding AAC frame header.
[aac @ 0xad15c280] SSR is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.

Manifest merger failed : uses-sdk:minSdkVersion 7 cannot be smaller than version 16 declared in library [com.github.adrielcafe:AndroidAudioConverter:0.0.8]

I'm getting the following error, How i can fix this? I'm new to android programming.

`Error:Execution failed for task ':app:processDebugManifest'.

Manifest merger failed : uses-sdk:minSdkVersion 7 cannot be smaller than version 16 declared in library [com.github.adrielcafe:AndroidAudioConverter:0.0.8] /Users/unnikrishnan.b/.android/build-cache/e47ae6a0b9101ebd97fdbbeb8e0d9fb011a3e4a6/output/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="cafe.adriel.androidaudioconverter" to force usage`

only last file being converted from filelist

I called your method to convert files in File[] but only last file passed through method is converted to set extension. Why so? Here is the code used.

final File pathname = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sdcard/test");
// System.out.println(pathname);

    File files[] = pathname.listFiles();
    for (File s : files) {
        if (s.getAbsolutePath().endsWith(".wav")) {
            System.out.println(s);
            IConvertCallback callback = new IConvertCallback() {


                @Override
                public void onSuccess(File convertedFile) {

                }

                @Override
                public void onFailure(Exception error) {

                }
            };

            AndroidAudioConverter.with(this)
                    .setFile(s)
                    .setFormat(AudioFormat.MP3)
                    .setCallback(callback)
                    .convert();

time

I would like to ask, how to improve the MP3 turn AAC time, now turn to a 1M MP3, takes a minute

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.