Code Monkey home page Code Monkey logo

standingwave3's People

Contributors

georgiee avatar jbaudanza avatar maxl0rd 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

standingwave3's Issues

Memory Leak?

Memory usage is steadily increasing over time

    public class Test4 extends Sprite
    {
        public function Test4()
        {
            stage.frameRate = 0xFFFF;
            addEventListener( Event.ENTER_FRAME, ef );
        }

        public var lastPlayer:AudioPlayer;
        public function ef( event:Event ):void
        {
            if ( lastPlayer != null )
            {
                lastPlayer.stop();
            }

            var source:IAudioSource = new SineSource(new AudioDescriptor( 44100, 2 ), 5, 440);
            var player:AudioPlayer = new AudioPlayer();
            player.play(source);   // actually make some noise

            lastPlayer = player;

            trace(Number(System.totalMemory/1024/1024).toFixed(2), Number(Sample.getAwaveMemoryUsage() / 1024 / 1024).toFixed(2));
        }
    }

Am I doing something wrong here? It is also leaking even if you play it one time, the "New" at each frame is to better show the increase.The only way I was able to fix it was to use Flash built-in "writeBytes" instead of "awave.writeBytes"

If I look at the Profiler, the ByteArrays stay in memory. A workaround:

On line 850 in "Sample.as" replace

Sample._awave.writeBytes(getSamplePointer(offset), destBytes, _descriptor.channels, numFrames);

with

destBytes.writeBytes( _awaveMemory, getSamplePointer(offset), numFrames * _descriptor.channels * 4 );

Now when I look at the profiler, it isn't leaking anymore.

I tried to play with "awave.c" using an old Alchemy toolchain since it doesn't seem to be compatible with Flascc but couldn't find a proper fix.

Problems with Performances and SoundSource

Hello,
I have a problems with Performances and SoundSource. I tried your exemple for SoundSource but it doesn't work . It works good with sineSource and embed file but not with urlrequest. Can you help me? Ask me if you want precisions.

My code:

package
{

import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.net.URLRequest;
import com.noteflight.standingwave3.performance.AudioPerformer;
import com.noteflight.standingwave3.elements.IAudioSource;
import com.noteflight.standingwave3.performance.IPerformance;
import com.noteflight.standingwave3.elements.AudioDescriptor;
import com.noteflight.standingwave3.output.AudioPlayer;
import com.noteflight.standingwave3.sources.SineSource;
import com.noteflight.standingwave3.sources.SoundSource;
import com.noteflight.standingwave3.performance.ListPerformance;
/**
 * ...
 * @author Vincent
 */
public class Main extends Sprite 
{

    public function Main():void 
    {


        var player:AudioPlayer = new AudioPlayer(4096);
        var url_base:String = "sounds/base_1.mp3";
        var url_ambiance:String = "sounds/ambiance_1.mp3";
        var url_instru:String = "sounds/instru_1.mp3";
        var audio_desc:AudioDescriptor = new AudioDescriptor(44100,2);
        //var source:IAudioSource = new SineSource(new AudioDescriptor(), 5, 440);
        var source_base_0:IAudioSource;
        var source_ambiance_0:IAudioSource;
        var source_instru_0:IAudioSource;
        var sequence:ListPerformance = new ListPerformance();

        function handleSoundComplete(e:Event):void
        {
            trace(e.target.bytesLoaded);
            trace("ok2");
            source_base_0 = new SoundSource(e.target as Sound);
            sequence.addSourceAt(1, source_base_0, 0, 0);
        }
            var sound2:Sound = new Sound(new URLRequest("sounds/ambiance_1.mp3"));
            sound2.addEventListener(Event.COMPLETE, handleSoundComplete_2);


        function handleSoundComplete_2(e2:Event):void
        {
            trace(e2.target.bytesLoaded);
            trace("ok2 - ambiance");

            source_ambiance_0 = new SoundSource(e2.target as Sound);
            sequence.addSourceAt(1, source_ambiance_0, 0, 0)
        }

        var AP_seq:IAudioSource =  new AudioPerformer(sequence, audio_desc);
        //AP_seq.mixGain = -12;
        player.play(AP_seq);
    }
}

}

Flash Example

Could someone post a simple working flash example? I cannot seem to get this to work under CS4...

trace output "Not direct"

When audio is playing I see the text "Not direct" printed to the output window repeatedly. Does this indicate something is wrong? The audio sounds fine. Is this maybe some stray debugging text that should be removed?

Thanks in advance.

WaveFile.createSample(recorder.output);

Hey Maxlord,
I was wondering if you guys ever implemented raw mic data to be put into createSample()

WaveFile.createSample(recorder.output);

I see a similar person had an issue here
#8

Thank you for your time and the great lib.

-Peter

When small frequency when there is no sound

var A0:Number =27.50;
var baseSound1:IAudioSource = new SoundSource(Sounds_s1,new AudioDescriptor());
var C4Note:IAudioSource = new new ResamplingFilter(baseSound1,A0);
var keyboardPlayer:AudioPlayer = new AudioPlayer();
keyboardPlayer.play(C4Note);

When small frequency when there is no sound

QueuePerformance

So I see that this wasn't ported over because there were zero instances of it being used. I'm trying to implement it because it would be perfect for a looping drum machine. Do you have any tips?

Thanks for all your hard work on this lib.

File error processing catalog.xml in sw3.swc(zip END header not found).

hey!
I get this error while trying to publish after importing the swc and adding the imports
import org.as3wavsound.WavSound;
import org.as3wavsound.WavSoundChannel;
import org.audiofx.timepitch.TimePitch;
Any clue what i am doing wrong here?
[i plan to use this in an app that will run on android and ios]

Thank you!

Alchemy envelope function bug?

Seems like there is a bug in the function (line 685)

static AS3_Val envelope(void *self, AS3_Val args)

Instead of (line 695)

expandSpline(&modPoint, scratch1, frames); // draws spline segment into scratch1

it should be

expandSpline(&modPoint, scratch1, frames*channels); // draws spline segment into scratch1

A workaround if people don't wan't to compile Alchemy is to change line 535 of "Sample.as" to

Sample._awave.envelope(getSamplePointer(offset), 1 /*_descriptor.channels*/, numFrames * 2, mp);

To trick Alchemy to do the right calculation, otherwise half of the sample don't get the envelope.

Complete Event will not fire for Audio Player

I have the following code and the "COMPLETE" event never fires. I have the com folder in the same directory as my .fla, and the awave.swc in my library path.

I am also getting "AUDIO CLIPPING" repeatedly traced out to the output panel. I changed the amplitude to 0.2 and even -5.0 it still plays just as loudly. I assume the amplitude is for the loudness? I thought lowering it would make the "AUDIO CLIPPING" go away and maybe that has something to do with the "COMPLETE EVENT" not firing.

import com.noteflight.standingwave3.elements.*
import com.noteflight.standingwave3.filters.*
import com.noteflight.standingwave3.formats.*
import com.noteflight.standingwave3.generators.;
import com.noteflight.standingwave3.modulation.
;
import com.noteflight.standingwave3.output.*
import com.noteflight.standingwave3.performance.;
import com.noteflight.standingwave3.sources.
;
import com.noteflight.standingwave3.utils.*;
import flash.events.Event;

var player:AudioPlayer = new AudioPlayer();
play_btn.addEventListener(MouseEvent.CLICK,playSinewave);

function playSinewave(e:Event):void{
var sinewave:IAudioSource = new SineSource(new AudioDescriptor(),5,440,0.2);
play_btn.enabled = false;
player.addEventListener(Event.COMPLETE,doComplete);
player.play(sinewave);
}

function doComplete(e:Event):void{
trace("COMPLETE")
play_btn.enabled = true;
}

Changing byteArray to SoundSource

I am trying to pass the microphone data through the filters but don't know how to convert the byteArray to SoundSource to pass it through the filters. I am recording the audio at 11 kHz. Please help!!

ListPerformance with elements overlapping in time not working correctly

Are ListPerformance elements allowed to overlap in time? Following code produces sound as expected in StandingWave2 but not in StandingWave3 (creates buzzing noise during overlapped parts).

    sequence1.addSourceAt(tempo.beatsInSeconds(0),
            new SineSource(new AudioDescriptor(), tempo.beatsInSeconds(2), 440));
    sequence1.addSourceAt(tempo.beatsInSeconds(1),
            new SineSource(new AudioDescriptor(), tempo.beatsInSeconds(2), 660));
    sequence1.addSourceAt(tempo.beatsInSeconds(2),
            new SineSource(new AudioDescriptor(), tempo.beatsInSeconds(2), 880));

tempo is just a utility class that converts to # of beats to seconds. BPM was set to 140.

ResamplingFilter plays half speed when given a stereo source

ResamplingFilter doesn't work correctly for stereo input. Instead it acts as if the value of 'factor' is halved.

Mono resampling works fine.

Background: I'm writing a game in AS3, and would like to randomly change the speed on samples by up to 1.5 to create variability and reduce repetitiveness. I'm using a mix of stereo and mono embedded WAV samples,

Test case: I've made a simple test case. Originally I noticed this problem with samples created with WaveFile.createSample(), but I tested it with SineSource and it has the same problem, so I made a simpler test case (i.e. without embedded WAVs),

Hope this library is still being maintained.

Peter Halasz.

package 
{
    import com.noteflight.standingwave3.elements.AudioDescriptor;
    import com.noteflight.standingwave3.elements.IAudioSource;
    import com.noteflight.standingwave3.filters.ResamplingFilter;
    import com.noteflight.standingwave3.output.AudioPlayer;
    import com.noteflight.standingwave3.performance.AudioPerformer;
    import com.noteflight.standingwave3.performance.ListPerformance;
    import com.noteflight.standingwave3.sources.SineSource;
    import flash.display.Sprite;


    /**
     * Test the resampling capability of the standingwave3 library.
     * 
     * Note: factor of 1.0 is optimized away, so 1.001 is used.
     * A factor of .999 gives the same (incorrect) result.
     * 
     * Library version: maxl0rd-standingwave3-189bdad
     *  
     * @author Peter Halasz
     */
    public class ResampleAudioTestSimpler extends Sprite 
    {

        public function ResampleAudioTestSimpler() 
        {
            var playList:ListPerformance = new ListPerformance();

            //these four should all sound the same :
            playList.addSourceAt(0, monoSineWave());
            playList.addSourceAt(1, stereoSineWave());
            playList.addSourceAt(2, new ResamplingFilter(monoSineWave(), 1.001));   // plays perfectly
            playList.addSourceAt(3, new ResamplingFilter(stereoSineWave(), 1.001)); // plays at half speed (220 Hz)

            //these four should all sound the same too:
            playList.addSourceAt(6, monoSineWave(220));
            playList.addSourceAt(7, stereoSineWave(220));
            playList.addSourceAt(8, new ResamplingFilter(monoSineWave(440), .5));   // plays 220 Hz (correct)
            playList.addSourceAt(9, new ResamplingFilter(stereoSineWave(440), .5)); // plays 110 Hz (incorrect)

            var source:IAudioSource = new AudioPerformer(playList, new AudioDescriptor());
            var player:AudioPlayer = new AudioPlayer();
            player.play(source);

        }

        private function monoSineWave(pitch:Number = 440):SineSource {
            return new SineSource(new AudioDescriptor(44100, AudioDescriptor.CHANNELS_MONO), 0.2, pitch);
        }

        private function stereoSineWave(pitch:Number = 440):SineSource {
            return new SineSource(new AudioDescriptor(44100, AudioDescriptor.CHANNELS_STEREO), 0.2, pitch);
        }

    }

}

Reverb

More a request than an issue.
Do you think is possible to implement a freeverb function in the awave.c module ?
i'm starting to working on it based on this library -> https://ccrma.stanford.edu/~travissk/faustflash/ , but seems that i'm hitting a dead point (standingwave works in a radical different way than faust, or the cpp version of it ).
Most of it, would the computational cost be sustainable, or would send the cpu usage to skyrocket levels?

FadeInFilter Bug

Hi, first of all 10x for the most optimized AS3 DSP solution on the web!
The bug I found is that FadeInFilter doesn't work properly but only creates glitch sounds out of my mp3 loop. The code is like:

var desc:AudioDescriptor = new AudioDescriptor();
var src:IAudioSource = new SoundSource(new Loop); //Loop is my Sound class
var amp:IAudioSource = new FadeInFilter(src, 4);
player.play(amp);

I tried assigning 'amp' var with:
AmpFilter(src, new ADSREnvelopeGenerator(desc, 2, 0, 1, 0.7, 3));

In this case I get silence in attack phase while decay, hold and release work correctly.

Any suggestions?

How to change the frequency using the ResamplingFilter?

I'm trying to change the frequency of a Wav file,but the ResamplingFilter doesn't work correctly.
I made a simple case for test.I used the StandardizeFilter at first and then I used the ResamplingFilter.
I tried and it worked at first,but it stopped soon.

Here's something about the error:

Error: Fill called beyond the bounds of an unresizable CacheFilter
at com.noteflight.standingwave3.filters::CacheFilter/fill()
at com.noteflight.standingwave3.filters::ResamplingFilter/getSampleRange()
at com.noteflight.standingwave3.filters::ResamplingFilter/getSample()
at com.noteflight.standingwave3.output::AudioSampleHandler/handleSampleData()
at com.noteflight.standingwave3.output::AudioPlayer/handleSampleData()

and this is my code:

import com.noteflight.standingwave3.formats.WaveFile;
import flash.events.Event;
import flash.net.FileFilter;
import flash.net.FileReference;
import com.noteflight.standingwave3.output.AudioPlayer;
import com.noteflight.standingwave3.filters.StandardizeFilter;
import com.noteflight.standingwave3.filters.ResamplingFilter;

var file:FileReference;
var player:AudioPlayer;
function init() {
file=new FileReference();
file.addEventListener(Event.COMPLETE,complete);
file.addEventListener(Event.SELECT,select);
file.browse();
}
function select(e:Event):void {
file.load();
}
function complete(e:Event):void {
player=new AudioPlayer();
var fil:StandardizeFilter = new StandardizeFilter(WaveFile.createSample(file.data));
var rfil:ResamplingFilter= new ResamplingFilter(fil,1.01);
player.play(rfil);
}
init();

Complete event not firing with audio player and Audio Clipping

I cannot get the complete event to fire. I have a button that calls the following code.

private function playSinewave(e:Event):void{
e.target.enabled = false;
sinewave = new SineSource(new AudioDescriptor(),5,440,1.0);
player.addEventListener(Event.COMPLETE,onPlaybackComplete);
player.play(sinewave);
}

private function onPlaybackComplete(e:Event):void{
sinewave_play_btn.enabled = true;
}

Also with this code the output Panel Repeatedly traces AUDIO CLIPPING. And at times it will Stutter real bad and sometimes even freeze up the player and issue a 15 second timeout warning.

Replaying sounds

HI, thanx for your work.
I am trying to record something with a backgrounf music. So i have succesfully implemented a player where i have two sources. The one is loading from an mp3 and the other is the recorder data.

I make a sequence and an audio performerfor each of my sources and then i use both audio performers as sources and i add them to a new sequence. (that is because i want to control in realtime the gain of each performer.). The outcome is assign to an audioplayer

This works fine until i replay the sound. At this case the recorded sound seems to play in fast forward and at the end of the recording sound throws an error

Error: Sample pointer out of range.
at com.noteflight.standingwave3.elements::Sample/getSamplePointer()

Before i replay the sound i try to ensure that audioplayer is stopped

player.stop()

reset the audio performer

_aPerformer.resetPosition()

I get the microphone data with

WaveFile.createSample(recorder.output)

And before i replay it (not really sure if this has a point) i set the position of the recorded data byteArray to 0

recorder.output.position=0

I would appreciate any help.
Thanx in advance!

Problem with mixing simultaneous sources

Hello, thanks by SW3, I am studing the new version of SW, and i am very happy with SW3.

I have found a problem with mixing simultaneous sources, for example:

            var sequence:ListPerformance = new ListPerformance();
            sequence.addSourceAt(0, new SineSource(new AudioDescriptor(), 0.8, 440));
            sequence.addSourceAt(0, new SineSource(new AudioDescriptor(), 0.8, 660));
            sequence.addSourceAt(0, new SineSource(new AudioDescriptor(), 0.8, 880));
            var source:IAudioSource = new AudioPerformer(sequence, new AudioDescriptor() );
            player.play(source);

The result have some noise, and do not work well, i whish to know how to solve this problem, do i have something wrong in my code?

Thanks by help, :)

Epub Example

Are there anyone know how to let it work?
I tried it under cs5.5,but the compiler said "can't find mx.core.FlexGlobal".

WaveFile.createSample Throws Index Out Of Range Error

Hi maxl0rd,

This does not happen in standwave2, but does in standingwave3 using identical methods of calling the function.

It throws the error at line 124 during the beginning of the for loop. I believe no data is received when calling data1 = sample.channelData[0]; just above at line 120.

Following is some variables just before the error:

wav flash.utils.ByteArray (@11ad8401)
bytesAvailable 50772622 [0x306ba8e]
endian "littleEndian"
length 50772668 [0x306babc]
objectEncoding 3
position 46 [0x2e]

groupId "RIFF"

fileLen 50772668 [0x306babc]

riffType "WAVE"

sample com.noteflight.standingwave3.elements.Sample (@11adc5c1)

chunkType "data"

chunkSize 50772624 [0x306ba90]

chunkStart 44 [0x2c]

blockAlign 0

bitsPerSample 16 [0x10]

wFormatTag 1

channels 2

rate 44100 [0xac44]

dwAvgBytesPerSec 176400 [0x2b110]

numSamples 25386312 [0x1835d48]

numFrames 12693156 [0xc1aea4]

i 0

c 0

j 0

data1 Vector. (@11b65541)
fixed true
length 0

data2 Vector. (@11b65681)
fixed true
length 0

Thanks

playing from a random position

I would like to start the playback from a random position, when I'm using a ListPerformer to sequence a number of samples.

I.e. what I have is a ListPerformer object (here called _listPerformance), and I'm doing something like:

var audioPerformer:AudioPerformer=new AudioPerformer(_listPerformance,new AudioDescriptor())
var audioPlayer:AudioPlayer=new AudioPlayer();
var audioPlayer.play(audioPerformer);

And I would like the playback to start, not from the beginning but from a time later in the list.

I have read about the CacheFilter and thought that this could be a possible option, but my understanding of the CacheFilter is that it will have to process all the audio up to the point I want to play, probably causing some notable delay.

So what is the best way to go about this?

Thanks for a great lib!

Lower rates problem

Hi, I've read the the README and some comments inside the packages about lower rates ( less then 22050) and I realise we just don't have any code to cope with it.

I'm using the StandardFilter as recommended but still not working.

I'm doing something like this:
sound_source = new StandardizeFilter( new SoundSource( new sound_class, new AudioDescriptor(AudioDescriptor.RATE_11025) ) );

But, looking inside the StandardizeFilter.as I checked that there isn't any condition to modify the samples (getSample) when rates are lower.

if (source.descriptor.rate == AudioDescriptor.RATE_44100) {
sample = _source.getSample(numFrames);
} else if (source.descriptor.rate == AudioDescriptor.RATE_22050) {
sample = _source.getSample(Math.floor(numFrames/2));
}

And, following my "logic" I did something like this:

if (source.descriptor.rate == AudioDescriptor.RATE_44100) {
sample = _source.getSample(numFrames);
} else if (source.descriptor.rate == AudioDescriptor.RATE_22050) {
sample = _source.getSample(Math.floor(numFrames/2));
}else if (source.descriptor.rate == AudioDescriptor.RATE_11025) {
sample = _source.getSample(Math.floor(numFrames/4));
}

And I also changed position and frameCount methods.

But the result still mute.

Am I doing something wrong or this condition (lower rates) aren't working well yet?

cheers
igor

Musical Instruments

Hi!

Thanks by this wonderfull library! :)

I would like to know if is posible to make performances of sounds (not the basic sine) like the sound of a flute, or a piano, how we can get this audio synthesis?

I would like to know which is the best way in terms of memory optimization to make this kind of performances, are the mathematical functions?, or transformations of other audio sources?.

Is posible for example to modify sineSource.as to get a sound like a flute?

Thanks by helping :)

how to play 8000hz wav audio

i want to paly 8khz wav audio,but not work , for exmaple:

             var d:ByteArray=new ByteArray();

	  WaveFile.writeBytesToWavFile(d,content,8000,1,16);
	  d.position=0;
	  
	  var audioSource:IAudioSource=WaveFile.createSample(d);
	  
	 var s:StandardizeFilter =new StandardizeFilter(audioSource);

	  player.play(s); 

creating a sample from recorder mic audio

I'm trying to get recorded audio data into a sample using the WaveFile.createSample method (passing the recorder.output) as argument. This results in the following error:

Error: Error #2030: End of file was encountered.
at flash.utils::ByteArray/readUTFBytes()
at com.noteflight.standingwave3.formats::WaveFile$/createSample()

I'm thinking that the byteArray that my mic recorder outputs is raw audio instead of wav audio, so I alternitavely tried to first convert my raw audio to wav audio using:

var wavData:ByteArray = new ByteArray();
WaveFile.writeBytesToWavFile(wavData, recorder.output, 44, 2, 16);
WaveFile.createSample(wavData);

but the same error occurs... I've been breaking my head on this for the past day, and there's no info online about this... what am I doing wrong? How can I get raw audio (byteArray) into a sample, and add filters to this (echo)?

Looping a Listperformance

Hey maxl0rd,

I tried creating a Listperformance and looping it. See my code for details:
I expected the loop to be played back steadily and without gaps.
Why is there a pause after every 4 beeps? Did I make a stupid mistake?
Is there maybe an easier way to achieve this?
Thanks in advance - the library is awesome!

var sequence:ListPerformance = new ListPerformance();
for (var i:int = 0;i<4;i++) {
  sequence.addSourceAt( i/2  , new SineSource(new AudioDescriptor(), 0.1, 440));
}

// Play it back.
var source:IAudioSource = new AudioPerformer(sequence, new AudioDescriptor(44100,2));

var mySample:Sample = source.getSample(source.frameCount)
var myLoop:LoopSource = new LoopSource(source.descriptor, mySample);
myLoop.firstFrame = 0;
myLoop.startFrame = 0;
myLoop.endFrame = source.frameCount;

var player:AudioPlayer = new AudioPlayer();
player.play(myLoop);

Trying to just simply mix sounds to a currently playing audioplayer

I have a game with a bunch of characters shooting bullets. Every time the characters shoot I am trying to play a sound.

The reason I'm trying to use SW3 is because there is a 32 instance limit on Soundchannel, so I'm thinking to mix them with StandingWave would be a good idea.

The problem is that I'm confused how to do this. According to the documentation you can set up tracks in a ListPerformance, but the problem is that I just want to do a "play" in real time not set up a chord or anything like that.

I tried creating new SoundSources and playing them on a static AudioPlayer, but apparently the .play() can only play one at a time.

Thanks!

sw3 missing EnvelopeFilter?

First of all, I think it is absolutely incredible that someone is contributing to Joe's SW platform, so major kudos for that.

I have SW2 integrated into a music app and am hoping to migrate to SW3 and use your nifty alchemy speed improvement. Today I downloaded the SW3 source. On compile with the SW3 platform (CS5 if you're interested), I immediately noticed an error where I try to define an EnvelopeFilter. On closer inspection through the new SW3 src folder, I noticed there is no EnvelopeFilter. All of the online documentation shows it should be there.

Is this some oversight on my part? Was the EnvelopeFilter replaced by something else? Any info would help.

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.