Git Product home page Git Product logo

vgaudio's People

Contributors

devlead avatar jam1garner avatar josephgibbs avatar nnn1590 avatar raytwo avatar soneek avatar thealexbarney 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

vgaudio's Issues

The CLI conversion runs indefinitely when called from a .NET app

I currently experiment with the VGAudio CLI application. The app I'm trying to make calls the CLI with a set of parameters.
The application then reads the standard output of the CLI to get a result of the conversion (and the time elapsed, if applicable).

The main issue when calling the CLI is that it doesn't close itself upon converting to certain file formats. It keeps running in the background (even though the conversion is finished) leaving the converted file locked.

A summary of the file formats

The file formats currently used by the app for the conversion:

  • WAV (works)
  • DSP (runs indefinitely)
  • IDSP (runs indefinitely)
  • BRSTM (runs indefinitely)
  • BCSTM (runs indefinitely)
  • BFSTM (runs indefinitely)
  • HPS (runs indefinitely)
  • ADX (works)
  • HCA (works)

The only ones that work with all approaches are WAV and the CRIWARE audio formats (ADX and HCA).
When converting the other formats (DSP, IDSP, BRSTM, BCSTM, BFSTM, HPS) directly using the command prompt, the CLI "hangs" for a second before starting the conversion. This is not the case for the WAV, ADX and HCA file formats.

Different ways to tackle this issue

I've tried several approaches:

  1. Executing the command, waiting for it to exit and then read the output with proc.StandardOutput.ReadToEnd()
// This doesn't work with certain file formats
var process = Process.Start(processInfo);
process.WaitForExit();
output = proc.StandardOutput.ReadToEnd();
  1. Executing the command and appending the lines using proc.StandardOutput.ReadLine()
// This one always works and is the thing I've been using up until now
var process = Process.Start(processInfo);
while (!process.StandardOutput.EndOfStream)
{
   output += process.StandardOutput.ReadLine() + "\r\n";
}
  1. Running the process asynchronously and appending the lines using DataReceivedEventHandler
// This one doesn't work with the same file formats as the first approach
var tcs = new TaskCompletionSource<int>();
var process = new Process
{
   StartInfo = processInfo,
   EnableRaisingEvents = true
};

process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
{
   if (!String.IsNullOrEmpty(e.Data))
      {
         MessageBox.Show(e.Data);
         output += e.Data + "\r\n";
      }
});

process.Exited += (sender, args) =>
{
   tcs.SetResult(process.ExitCode);
   process.Dispose();
};

process.Start();
return tcs.Task;
  1. Not redirecting the output and show the command line instead
// This one always works but then the app can't read the output
processInfo.RedirectStandardOutput = false;
processInfo.UseShellExecute = true;

The reason I'd like to switch to the third approach (asynchronous) is that I don't want the CLI to hang the application until the conversion is complete. The problem is that using DataReceivedEventHandler asynchronously makes the CLI keep running in the background as if I waited for it to exit and then read the output with proc.StandardOutput.ReadToEnd() synchronously.

Is there a different way the CLI handles the CRIWARE audio formats from the other ones (DSP, IDSP, BRSTM, BCSTM, BFSTM, HPS)?
Could the conversion process be somehow unified or is the problem somewhere else?
Many thanks.

BFSTM channels not exporting with the proper length

When I've been using VGAudio with BFSTM files (with multiple channels) and exported them, they don't seem to export with the original bfstm's time duration

For example, the track I was testing this on was 1:18 long, and what I got was 40 seconds long.
Is there any way of stopping this?

[Feature Request] Add import/export support for MSU-1 PCM audio

There have been many MSU-1 looping audio packs created for SNES games (https://www.zeldix.net/t2684-alphabetical-list-every-snes-msu-1-hack). These packs can be used as a source for easily creating other looping audio formats for use in other games or audio players. In addition, looopable audio on Smash Custom Music could be used as a source to go the opposite direction, acting as a source for new MSU-1 hacks for SNES games.

It turned out to be low effort to add import/export support for this format in LoopingAudioConverter. You can see the commits and more information here:
libertyernie/LoopingAudioConverter#17

FSB4 maybe?

I'm remaking a game in Unity that uses FMOD, and Unity itself doesn't allow for loading external FSB files, and I'd like to be able to load the original music files from the original game

Does not read OGG files

I am attempting to convert an OGG to IDSP (for the purposes of converting a bug fix/enhancement mod from the PC to the Wii version of LEGO Star Wars: The Complete Saga, then editing the header to be like the other music files). It spits out a "Can't infer input file type from extension." error instead.

Bandai Namco .lopus Encoding Troubles

Using a .lopus file from VGAudioCli in Super Smash Bros. Ultimate appears to be mute in-game. With the following corrections, I was able to modify the output with the below to make the file somewhat usable:

  • Offset 0x1F should always have a value of 0x10
  • Offset 0x4A should always have a value of 0xA8
  • The 32-bit integer for offset 0x5C should always equal 0x78000000

I used "somewhat usable" because after these corrections, the audio will only play for a few seconds and just cut out entirely after. I have a hunch that offsets 0x24, 0x64, 0x68, and 0x6C are the last possible cause for the issue mainly because I haven't corrected these and can't figure out what they actually define.

I would also like to note that starting from offset 0x68, it contains the value 0x000000A0, which then that value follows to 0x110, then 0x1B8, 0x260, and etc. This is missing in encoded .lopus files from this application.

I can try to provide more information or clarifications you need, if necessary.


Edit:
0x24: Seems to be an offset. It splits the change between using 0x0000000A to 0x000000F0.
0x64: Seems to also be an offset in little-endian format. It's 40 bytes smaller than the value of offset.
0x6C: All I can say is it's little-endian.

Static at loop point when aligning GC-ADPCM audio

Continued from libertyernie/brawltools#160 from @gheskett

All that being said, the static issues that I ran into were definitely present back when I made that post in November. I was just messing around with some audio trying to replicate what was going on, and I encountered this:

The waveform at the top represents the original waveform and the middle one represents the result after making a BCSTM conversion with VGAudio. The bottom waveform represents the difference between the two, and the split in the audio represents the end loop point of the BCSTM (not the original). As you can see, there is minimal loss going on throughout the conversion (as a natural result of ADPCM compression), but all of a sudden, the last 10 samples before the loop point are problematic. While these samples may not seem like a big deal and require zooming to even see, they are still audible in the result. In this example, it's not that bad, but the one I dealt with back in November was a lot worse.

About encryption hca

I found the pes2019 Android key on the Internet, what should I do next, please help me

Something's wrong with the "batch" option...

so, just for kicks i decided to encode some uncompressed PCM files into HCA with your tool using the --batch option. these are the parameters i used for this thing:
VGAudioCli.exe --batch -i "E:\SONY\PS2\DARK_CHRONICLE\sound_jpn" -o "E:\SONY\PS2\DARK_CHRONICLE\[hca]sound_jpn" --out-format hca --bitrate 128000

however, for some insane reason the tool just crashes the moment it even does that. this is how it occurs:
(as a net451-dependant app)

Unhandled Exception: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: MaxDegreeOfParallelism
at System.Threading.Tasks.ParallelOptions.set_MaxDegreeOfParallelism(Int32 value)
at VGAudio.Cli.Batch.BatchConvert(Options options) in D:/VGAudio/VGAudio.Cli/Batch.cs:line 24
at VGAudio.Cli.Converter.RunConverterCli(String[] args) in D:/VGAudio/VGAudio.Cli/Converter.cs:line 47
at VGAudio.Cli.VGAudioCli.Main(String[] args) in D:/VGAudio/VGAudio.Cli/VGAudioCli.cs:line 7

(as a standalone app)

Unhandled Exception: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: MaxDegreeOfParallelism
at System.Threading.Tasks.ParallelOptions.set_MaxDegreeOfParallelism(Int32 value)
at VGAudio.Cli.Batch.BatchConvert(Options options)
at VGAudio.Cli.Converter.RunConverterCli(String[] args)
at VGAudio.Cli.VGAudioCli.Main(String[] args)

below all that is a "progress bar" that's been left hanging only to disappear when the tool's been done crashing.
the same thing even happens in reverse, such as when i wanted to "decode" some HCA files into WAV through this option alone.

this error might be just me at this point, but if anything it just made me wonder how the hell does this option even work at all? does it simply scan through all the input files so they can be encoded/decoded into these output files the user has set the folder into through said option, assuming all parameters necessary for encoding/decoded all of these files into the final result are all set by the user itself? or does it do anything more complex than that?

BCSTM files incompatible with a 3DS

The BCSTM files created using the VGAudio library work fine when decoded on a computer, but fail to play on a 3DS, specifically when applied as a background theme in the HOME menu. I've tried comparing the file information of two BCSTM files, which had everything in common but the library that was used to encode the file. The results can be seen below:

Original
Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x250
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051084

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0390, 0xFE4F
[1]: 0x0A1C, 0xFB2E
[2]: 0x0606, 0xFF7D
[3]: 0x0989, 0xFDC3
[4]: 0x0746, 0xFC4A
[5]: 0x0BA7, 0xFB2E
[6]: 0x071F, 0xFFD3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x0069
Loop History sample 2: 0x0069

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0179, 0xFF5C
[1]: 0x08C5, 0xFBC8
[2]: 0x045A, 0x0160
[3]: 0x0991, 0xFD7E
[4]: 0x054B, 0xFE04
[5]: 0x0AFB, 0xFB56
[6]: 0x0672, 0x00B3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x003A
Loop History sample 2: 0x003A
Re-encoded (VGAudio)
Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0388, 0xFE58
[1]: 0x0A1C, 0xFB2F
[2]: 0x060C, 0xFF72
[3]: 0x097F, 0xFDCC
[4]: 0x0745, 0xFC45
[5]: 0x0BA2, 0xFB35
[6]: 0x0713, 0xFFDC

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0069
Loop History sample 1: 0xF0EF
Loop History sample 2: 0xF0EF

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0177, 0xFF5F
[1]: 0x08C2, 0xFBCB
[2]: 0x045C, 0x015B
[3]: 0x0987, 0xFD87
[4]: 0x054C, 0xFE00
[5]: 0x0AF9, 0xFB5C
[6]: 0x066C, 0x00B8

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x003A
Loop History sample 1: 0xF2DE
Loop History sample 2: 0xF2DE

There seems to be a difference in offsets for the following:

  • Last interleave size without padding (0x250 vs 0x24A)
  • Sample count from data size (2051084 vs 2051072)
  • All coefficients of both channels
  • Complete loop information (Loop Pred/Scale, Loop History sample 1, Loop History sample 2) of both channels

Other than that, the files seem to be identical.

May I ask if a fix is possible? I can provide more information or samples if needed.
Also, thank you for the previous fix you've made!
Many thanks in advance.

Less of an Issue, More of a format request

Hi, there are some particular files for the game gladius by LucasArts which has extensions being labeled as ds2, and dsb. They both are a unique type of .dsp from what i can tell, the ds2 file is a mono track that gets outputted in stereo by the game, when using a standard .dsp in place of a ds2 file the audio channels are not in sync, and typically the left channel will begin playing the end of the track first before looping back to the beginning. Any information on how to decode and encode properly would be awesome, or potentially added support to VGAudio would be great.

[Closed, invalid issue] What's the correct settings to encode a custom music for Digimon Cyber Sleuth Complete Edition (Steam)?

First of all, i've managed to extract the .hca files using DSCSTools.
The files were located in the DSDBbgm.steam.mvgl file.

After extracting the songs, then i used VGAudio to re-conver an ADX custom music i've made a long time ago to .hca, it worked by still keeping the loop points and stuff but.. after doing a replacement to one of the original .hca files and repacking the extracted songs only with that edit to test it, i tried replacing the menu music and.. it sounds corrupted.

Is there a setting i didin't changed while doing the conversion?

Puyo Puyo Tetris looped WAVs (format 2)

For Puyo Puyo Tetris, the wav files seem to do looping differently. The highlighted section is 302569 and the one right after it is 3477767.
2018-03-16_21-00-16
Renaming it to LWAV and putting it into vgmstream allows me to get it's loop points and have it loop.
2018-03-17_23-37-11
When opening it with VGAudio, it gives me unsupported format 2.
2018-03-17_23-35-05

BGM_T07_toko_p.zip

Sonic Frontiers HCA Convert Issue

While some files work fine, others converted using VGAudio of the boss music from Sonic Frontiers end up with a corrupted effect.

As discovered here, https://gamebanana.com/tuts/15462?post=10405449, VGAudio removes vital code from the hex that were extra sound data.
As a result, the music is corrupted and doesn't work properly.
Can someone fix this issue in VGAudio to prevent this from happening?

[Suggestion] Support AST and BNS containers

Title explains. AST (and related format AFC) were used in various Gamecube and Wii games for BGM, such as Wind Waker, Twilight Princess, Super Mario Galaxy, and others.

Edit: BNS please as well; it is the format used in Wii channel banner sounds.

how to convert wav to hca or awb

if a hca encrypted with a custon key,use vgmstream can decod,does it show that encode is feasible?
If possible,what is the convert command ,such as convert aaa.wav to bbb.hca(encrypted with a custon key).

Slight Issue with HPS Encoding

I've noticed that the HPS streams seem to have an issue where some instances of static are formed during playback. Although this effect is mostly subtle and cannot be heard with vgmstream at all, it is present when used on Dolphin and the Wii/GameCube (especially with softer pieces of music). I don't know this for certain, but I think the issue lies within the block sizes. I have found that most (if not all) HPS streams used in the games have block sizes of 0x00010000, whereas VGAudio tends to create block sizes of 0x0000FFC0, a difference of 64 bytes. While I don't fully understand the format or why a block size would negatively affect the playback of the audio, it remains put that vgmstream doesn't exhibit this problem, so I honestly do think that is the cause of the issue.

image

Truncate at Loop Points

I know you're working on stuff, but I just thought I'd put this here (though you may already know it); I'm not sure when this started, but at least when compiling from the latest master right now, the program no longer truncates files at the loop end point. I only noticed this with idsp, so I'm not sure if it happens with other formats as well. I think there used to be an option for this? Or I may have lost my mind, who knows.

EDIT: Wait, now I'm not totally sure. I made another one and manually cut it off at the loop point, but the file sizes are the same, so maybe it just writes the wrong number for total samples?

Ubisoft raki format

This can convert ubisoft raki adpc from format that are avaliable in vgmstream?

Removing the loop doesn't always work

When converting several files, I've noticed that conversions from some file types don't allow me to use the "--no-loop" parameter to remove the loop information from the file. And if the parameter is not specified, the loop stays there even if I don't want it to.

For example, when I convert "test.hca" to "test.wav" without the use of "--no-loop" (VGAudioCli.exe -i test.hca -o test.wav), the loop information still shows up in the metadata, which might not be intentional - as far as I know, wave files don't support loops. If the loop information stays in the WAV file, it is used to create a loop during the next conversion (to HCA, for example), which makes me unable to specify I don't want the newly created file to loop.

The problem is during the conversion to WAV: when I specify "--no-loop" at the end (VGAudioCli.exe -i test.hca -o test.wav --no-loop), it throws me an error:
The method or operation is not implemented.

When doing the batch conversion (VGAudioCli.exe -b -i . -o . --out-format wav --no-loop), it gives me more information about the error:

test.hca
Error converting test.hca
System.NotImplementedException: The method or operation is not implemented.
   in VGAudio.Formats.CriHca.CriHcaFormat.GetCloneBuilder()
   in VGAudio.Formats.AudioFormatBase`3.WithLoop(Boolean loop)
   in VGAudio.Formats.AudioFormatBase`3.VGAudio.Formats.IAudioFormat.WithLoop(Boolean loop)
   in VGAudio.Formats.AudioData.SetLoop(Boolean loop)
   in VGAudio.Cli.Convert.EncodeFiles(JobFiles files, Options options)
   in VGAudio.Cli.Convert.ConvertFile(Options options, JobFiles files, Boolean showProgress)
   in VGAudio.Cli.Batch.<>c__DisplayClass0_1.<BatchConvert>b__1(String inPath)
Finished
Time elapsed: 0,0524557

However, when converting using a different format, it works with no problems whatsoever.
For example (VGAudioCli.exe -i test.wav -o test_no_loop.wav --no-loop):

Success!
Time elapsed: 0,0615439

When reading metadata from test_no_loop.wav, it won't contain any loop information and won't carry it to the next conversion as expected.
So as of right now, the possible workaround is to convert the file to WAV first (the loop information will be preserved even without specifying it), and then convert the newly created WAV file again to WAV, but now with the "--no-loop" parameter. Once this is done, it can be converted and the loop won't be present.

I'd like to ask if there's any chance that a fix will be made.
Many thanks.

Super slow on .NET 5 WebAsm

I'm building a web app for export acb for d4dj in one key with blazor wasm, but it's super slow, that takes lots of mins to encode a 2min audio file.

Even the WaveReader.Read() takes about 20 sec!

here's my code:

        async Task<(byte[], int)> EncodeHCA(byte[] audio)
        {
            var reader = new WaveReader();

            var writer = new HcaWriter
            {
                Configuration = new HcaConfiguration
                {
                    Bitrate = 128 * 1024,
                    Quality = CriHcaQuality.Highest,
                    TrimFile = false,
                    EncryptionKey = new CriHcaKey(0x59f449354d063308)
                }
            };

            var audioData = await Task.Run<AudioData>(() => reader.Read(audio));
            var format = audioData.GetFormat<Pcm16Format>();

            byte[] output = null;

            using (var ms = new MemoryStream())
            {
                await Task.Run(() => writer.WriteToStream(audioData, ms));
                await ms.FlushAsync();
                output = ms.ToArray();
            }

            return (output, (int)(format.SampleCount / (float)format.SampleRate * 1000));
        }

Or maybe it's a issue from dotnet5 idk

System.ArgumentNullException on large batch processing sets

When processing large numbers of files with the batch process option, I'm having repeatable failures which halt processing.

Error as follows:

[#-------------------] 28525/532893 5.4% \System.ArgumentNullException: Value cannot be null.
   at System.Threading.Monitor.Enter(Object obj)
   at VGAudio.Cli.ProgressBar.TimerHandler(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.TimerQueueTimer.CallCallback()
   at System.Threading.TimerQueueTimer.Fire()
   at System.Threading.TimerQueue.FireNextTimers()

Command:

VGAudioCli.exe -b -r -i "C:\in\" -o "C:\out\" --out-format wav

OS:
Win 10 Pro Workstation, 1803, 17134.81

Data is ~550,000 ATRAC9 files being converted to PCM 16-bit WAV's. At lower batch sizes - around 50,000 - I am still getting the exact same errors, but inconsistently - some of the time it will complete successfully, sometimes fail. On the full set, I usually get the error ~3-5% into the set, on the 50,000 subset I have had errors ~60%, but also successes.

Any way to encode audio region metadata into a BFSTM?

Not exactly sure where to ask this. I've been getting into modding music for Zelda: Breath of the Wild. The town themes in that game are unique because they cycle through day and night themes, along with smooth transitions between the two, with all those different tracks in the same audio file.

Using the VGAudio command line tool, I analyzed the metadata for one of the town themes and found a section called, "Audio Regions," which correspond nicely with the different sections and jump points in the track.

vgaudio kakariko

One person in the BotW modding community has figured out how to encode these regions into their music mods, but no one else has been able to figure it out. Is there an advanced function of VGAudio that I'm missing? Is it something that can come to VGAudio in the future if one doesn't exist yet? Are there tools out there currently that can encode these audio regions?

Thank you for any help you can provide, and sorry if this is the wrong spot for this.

how to convert so many wav file to hca

hello
i want to convert so many wav files to hca format, but i dont know how VGAudio Work

you say must insert this comment:
VGAudioCli -b -i source -o dest --out-format hca

where this command must be insert?

Add option to increase volume of audio

The title is pretty self explanatory, but add an option to increase volume in decibals. This can help with BRSTM files and other files being too quiet in game

24-bit audio support

I hope this can be added as an experimental support.
I have some 24-bit remastered WAVs for Sonic Origins that I want to loop for a homebrew Hi-Res Audio ALAC OST release.
Most of the WAVs are 24-bit, and I don't want to downconvert to 16-bit for this to work, as some of this WAVs are also in 96 kHz.

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.