Giter Club home page Giter Club logo

losslessswitcher's Introduction

header image with app icon

LosslessSwitcher switches your current audio device's sample rate to match the currently playing lossless song on your Apple Music app, automatically.

Let's say if the next song that you are playing, is a Hi-Res Lossless track with a sample rate of 192kHz, LosslessSwitcher will switch your device to that sample rate as soon as possible.

The opposite happens, when the next track happens to have a lower sample rate.

Installation

Simply go to the Releases page of this repository or via link to latest release

Drag the app to your Applications folder. If you wish to have it running when logging in, you should be able to add LosslessSwitcher in System Settings:

> User & Groups > Login Items > Add LosslessSwitcher app

App details

There isn't much going on, when it comes to the UI of the app, as most of the logic is to:

  1. Read Apple Music's logs to know the song's sample rate.
  2. Set the sample rate to the device that you are currently playing to.

As such, the app lives on your menu bar. The screenshot above shows it's only UI component that it offers, which is to show the sample rate that it has parsed from Apple Music's logs.

app screenshot, with music note icon shown as UI button

If you wish, the sample rate can also be directly visible as the menu bar item.

app screenshot with sample rate shown as UI button

Do also note that:

  • There may be short interuptions to your audio playback, during the time where the app attempts to switch the sample rates.
  • Prolonged use on MacBooks may accelerate battery usages, due to the frequent querying of the latest sample rate.

Bit Depth switching is also supported, although, enabling it will reduce detection accuracy, hence, it is not recommended.

Why make this?

Ever since Apple Music Lossless launched along with macOS 11.4, the app would never switch the sample rates according to the song that was playing. A trip down to the Audio MIDI Setup app was required. This still happens today, with macOS 12.3.1, despite iOS's Music app having such an ability.

I think this improvement might be well appreciated by many, hence this project is here, free and open source.

Prerequisites

Due to how the app works, this app is not, and cannot be sandboxed. It also has the following requirement, due to the use of OSLog API:

  • The user running LosslessSwitcher must be an admin. This is not tested and assumed due to this Apple Developer Forums thread.
  • Apple Music app must have Lossless mode on. (well, of course)

Other than that, it should run on any Mac running macOS 11.4 or later.

Disclaimer

By using LosslessSwitcher, you agree that under no circumstances will the developer or any contributors be held responsible or liable in any way for any claims, damages, losses, expenses, costs or liabilities whatsoever or any other consequences suffered by you or incurred by you directly or indirectly in connection with any form of usages of LosslessSwitcher.

Devices tested

Here are some device combinations tested to be working, by users of LosslessSwitcher. Regardless, you are still reminded to use LosslessSwitcher at your own risk.

CPU Mac Model macOS Version Beta macOS? Audio Device
Intel MacBook Pro 13 inch (Early 2015, Dual Core i5) 11.6.2 No Denon AVR-X4400H
Intel Mac mini (2018) 12.2
12.4
No Denon PMA-50
Intel MacBook Pro 13 inch (2018) 12.3.1 No Denon PMA-50
Intel MacBook Pro 13 inch, four Thunderbolt 3 ports (2016) 12.3.1 No Topping DX7 Pro
Apple Silicon MacBook Pro 13 inch (M1, 2020) 12.3.1 No FX Audio DAC-X6
Intel MacBook Pro 15 inch (2016) 12.4 No Topping D30Pro
Apple Silicon Mac mini (M1, 2020) 12.4 No Meridian Explorer 2
Intel Hackintosh (XPS 9570, i7-8750H) 12.4 No Universal Audio Apollo X4
FiiO Q3
FiiO M5 (DAC mode)
Intel MacBook Pro 13 inch (2016) 12.4
12.6.1
No AudioQuest Dragonfly Cobalt
Apple Silicon Mac mini (M1, 2020) 12.4 No iFi Zen DAC V2
Intel MacBook Pro 15 inch (2018) 12.4 No PS Audio Sprout
Apple Silicon MacBook Air 13 inch (2020) 12.5.1 No Shanling M8
Apple Silicon Mac Studio (M1 Max, 2022) 12.6 No Focusrite Scarlett 18i8 (2nd Gen)
Intel MacBook Pro 16 inch (2019) 12.6 No Mytek Brooklyn+ DAC
Intel Mac mini (Late 2014) 12.6.3 No NAD C658
Apple Silicon Mac mini (M1, 2020) 13.0 22A5286j Topping D50s
Apple Silicon Mac mini (M1, 2020) 13.0 No iBasso DC06
Khadass Tone 2 Pro
Apple Silicon MacBook Pro 14 inch (M1 Pro, 2021) 13.0
13.0.1
No Topping D10 Balanced
Apple Silicon Mac mini (M1, 2020) 13.0.1 No Fiio K7
Fiio K5 Pro (AKM DAC)
Topping EX5
Apple Silicon MacBook Pro 14 inch (2021) 13.0.1 No AudioQuest Dragonfly Black v1.5
Apple Silicon MacBook Air (M1, 2020) 13.1 No Schiit Bifrost 2
Intel MacBook Pro 15 inch (2018) 13.1 No Apogee Groove
Apple Silicon iMac 24 inch (M1, 2021) 13.1 No SMSL PO100
Apple Silicon MacBook Pro 14 inch (2021) 13.1 No Chord Mojo
Apple Silicon Mac mini (M1, 2020) 13.2 No RME ADI-2 DAC FS
Apple Silicon MacBook Pro 16 inch (M1 Max, 2021) 13.2 No M-Audio Fast Track
Apple Silicon MacBook Pro 14 inch (M1 Pro, 2021) 13.2 No Topping D10s
Apple Silicon Mac Studio (M1 Max, 2022) 13.2.1 No RME ADI-2 PRO FS R (Black Edition)
Intel 27-inch iMac (2017) 13.2.1 No Chord Hugo M Scaler + TT2 Combo
Apple Silicon Mac mini (M1, 2020) 13.2.1 No Moondrop Moonriver 2
Apple Silicon MacBook Pro 13 inch (M1, 2020) 13.3.1 No Gustard X18
Intel 27-inch iMac (Late 2014) 13.3.1 (a) No SMSL M500
Apple Silicon Mac mini (M2 Pro, 2023) 13.5 No FiiO K5 Pro
Apple Silicon Mac mini (M2 Pro, 2023) 13.5 No JDS Labs Element III MK 2
Intel Mac mini (Late 2014) 13.5 (Opencore) No VLink192 to Rega DAC
Intel MacBook Pro 16 inch (2019) 13.6.4 No VMV D1SE
Intel MacBook Pro 16 inch (2019) 13.6.4 No Denon AVR-X6700H
Apple Silicon MacBook Pro 16 inch (M1 Max, 2021) 14.0 23A5328b Focusrite Scarlett 2i2 3rd Gen, Internal MacBook DAC
Intel MacBook Air 13 inch (2020 i5 1.1 Ghz Quad-Core) 14.0 23A5328d PreSonus Studio 1810c
Apple Silicon MacBoox Air 13 inch (M1, 2020) 14.0 No Cambridge Audio DacMagic 100
Apple Silicon Mac Studio (M1 Max, 2022) 14.4.1 No Hidizs S9 PRO
Apple Silicon MacBook Air 13 inch (M2, 2022) 14.4.1 No Cambridge Audio DacMagic XS
Apple Silicon MacBook Pro 14 inch (M3 Pro, 2024) 14.4.1 No RME ADI-2 PRO FS R (Black Edition)
Intel Mac Pro 6.1 (2013) 14.4.1 (Opencore) No Cambridge Audio Edge NQ
Intel MacBook Pro 15 inch (2012) 14.5 (Opencore) 23F5074a Fiio KA3

You can add to this list by modifying this README and opening a new pull request!

Do note that Steven Slate Audio VSX software may not be fully compatible with LosslessSwitcher, and both software may interfere with each other. Please refer to discussion #100 for more information.

License

LosslessSwitcher is licensed under GPL-3.0.

Love the idea of this?

If you appreciate the development of this application, feel free to spread the word around so more people get to know about LosslessSwitcher. You can also show your support by sponsoring this project!

Dependencies

  • Sweep, by @JohnSundell, an easy to use Swift String scanner.
  • SimplyCoreAudio, by @rnine, a framework that makes CoreAudio so much easier to use.
  • PrivateMediaRemote, by @DimitarNestorov, in order to use private media remote framework.

losslessswitcher's People

Contributors

4050 avatar 7enso avatar afreedma avatar basleenders avatar bastiaanterhorst avatar blademan007 avatar claudiuschan avatar code1lt avatar eszet avatar flxvctr avatar g4ronliu avatar gaborszello avatar garugor avatar gbenedict avatar heat120 avatar itoto avatar lilipeipei avatar nrcyclist avatar ntinti avatar rbnetengr avatar robdaemon avatar saudumm avatar simonives avatar staxfax avatar taltalon avatar thestroj avatar thinkscape avatar tommak-panda avatar vincentneo avatar yu-li-nano 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

losslessswitcher's Issues

Build 15: Bit Depth Switching causing unnecessary stuttering

beta 10/build 15, connected to DAC via USB

Okay so here's my experience with the latest:

With Bit Depth Switching on:

  • It "works", it does switch the bit depth
  • when selecting a track with a different depth, my audio had to pause 3 times before the track started playing
  • when selection the 2nd track on the same album (no switching involved!) it stuttered twice before playing, selecting the third track it stuttered like 3-4 times.

In its current state, I can't consider this functioning as intended
(I dont use this feature, just, assuming I really needed to have the right depth)

With Depth off:

  • With depth off, things play fine on the same album
  • no lag when switching between albums with the same bit rate & different depths
  • only lag is when bitrate switching, the track starts and a split second later my dac has to adjust to the new bit rate, this isn't a consistent issue, sometimes it plays with no audio sneaking out the beginning
  • i did find that going between, ie, from 88 to 96, sometimes it would go 88-48-96, but this wasn't consistent

Sometimes incorrect sample rate chosen

On some of my playlists LosslessSwitcher chooses the sample rate of the next track rather than the current track. I found the same behaviour on both the current stable version (v1.0.0) as well as the current beta (v1.1 build 5).

Mac OS 12.3.1 (21E258)
Apple Music 1.2.3.56

Looking at the Console for the Apple Music log lines, it appears that both the current track and next track are being logged:

play> cm>> mediaFormatinfo '<private>' , songEnhanced, audioCapabilities: 0x4, 0x4, asbdFormatID = qlac, sdFormatID = alac, lossless, asbdNumChannels = 2, sdNumChannels = 2, sdBitDepth = 16 bit, asbdSampleRate = 44.1 kHz, is not rendering spatial audio
...
play> cm>> mediaFormatinfo '<private>' , songEnhanced, audioCapabilities: 0x0 -> 0x10, 0x0 -> 0x10, asbdFormatID = qlac, sdFormatID = alac, high res lossless, asbdNumChannels = 2, sdNumChannels = 2, sdBitDepth = 24 bit, asbdSampleRate = 96.0 kHz, is not rendering spatial audio

The first line is associated with the current track playing, the second line with the next track in the queue. To deal with this case the approach for determining the sample rate would need to be updated from just taking the most recent log line containing a sample rate to something more sophisticated. I'm not sure if there is enough metadata in the log lines to work out which one is associated with the current playing track?

Interestingly not all my playlists log the next track in this way. I have yet to work out what conditions cause Apple Music to do this.

Thanks for writing this by the way!

Compact sample rate on menu bar

I'm on a quest to achieve the most minimalist menu bar possible (notch Mac here, already using Hidden), any chance to add an option to have shorter sample rate text?

Maybe even some different options

Full: 48.0 kHz
Compact: 48.0
Mini: 48
w/ Bit Depth: 48/24

Not sure if this is something more people would enjoy, but I guess this is easy to implement, I'll take a look on the code and see if I can come up with something.

Apple Music Dropouts

Great work on this Switcher . I’m using a current MacMini M1 . I am occasionally getting dropouts during a song being played . I use this Mini just for music .

Beta releases.

I am running a late 2015 imac and a current macmini m1 & m2 . The only beta release that reliably changes the sample rate is the hybrid strategy beta in June 2022 before the selectable device beta was added. every beta since the hybrid strategy beta does not work on any of my three macs ,old and new.

disk writing

hi,
I used the app for a couple of times, but I noticed it was writing and reading the disk way more than it needs or should.
I saw it read 55 gigabytes and write 11 in 2 hours.

Cut off at the first few seconds of every song

When a song start playing, there is always a few pauses (or cut offs) for 0.5-1 second then resume playing. Sometimes there are multiple pauses and electromagnetic noise. It happens to ~80% of songs and only happens within the first 0.5-2 seconds of each song. Happens to all streaming and downloaded songs. When I quit the LosslessSwitcher app, it's gone.

MacBook Air: 2020 M1 base model
OS: 13.0.1 (22A400)
LosslessSwitcher: version 1.1, build 14
Apple Music: 1.3.0.138
all up to date

Thanks for help!

Apple Music app keeps opening automatically (in the background) while LosslessSwitcher is running

With LosslessSwitcher running, with the latest couple of (beta) versions, the Apple Music app opens in the background on its own. Even when you then quit the Music app, it will open in the background again (and you can see the dot in the dock indicating that the app is running). This does not happen with the current "stable" version of LosslessSwitcher, I've noticed it with the latest beta releases...

When Audio MIDI Setup is set to multichannel, LosslessSwitcher will set it to stereo

I have an Intel Mac mini connected to an AVR via HDMI. The AVR supports multi-channel and is currently set up for 5.1 playback.

Occasionally I wish to play content in multi-channel. To do this, in Audio MIDI Setup I set Audio Devices > HDMI > Output format to multi-channel (In my case the option is 8 channel).

However, when I have LosslessSwitcher enabled it will switch from multi-channel to stereo.

• I would like LosslessSwitcher either to leave the selection as multi-channel or to dynamically switch channel selection relevant to the number of discrete channels being streamed.

Sample rate switching one minute early

Hi.
I'm on M1 MacBook Air MacOS 12.3.1, and I found out the sample rate would switch to the next song's sample rate about 1 min too early. Let's say I'm playing a 48kHz track with a 96kHz one on queue. It'll switch to 96kHz while the current 48kHz one still has one minute to go. Wondering if anyone else is experiencing the same issue.

Volume change to Max at every switch.

Issue :

I'm currently using Sanoma version 14.0 in conjunction with BlackHole, AU Lab, and a USB-C DAC/Amp. After each switch, the volume is automatically set to the maximum level without user input, which is dangerous.

Summary:

  • The issue occurs consistently on my system.
  • I'm running the latest version of Sanoma (14.0).
  • This behavior has been observed while using BlackHole and AU Lab in combination with a USB-C DAC/Amp.
  • Please note that this issue can pose a risk to users' hearing and potentially damage audio equipment.

(Of course, thank you for your work. I look forward to use LosslessSwitcher.)

Opening YouTube in Safari changes Sample Rate

Seems like Beta 6, build 11 has this issue -

  • if I'm playing music on music app on my Macbook air, then I open Safari and go to YouTube.com - it seems like losslesswitcher is reading YouTube somehow and changing the sample rate. Even if I have Safari completely muted. So not sure if it's just YouTube or there are certain situations where losslesswitcher is reading music/sound from places other than the music app.
  • I could also see someone actually liking this feature if they play YouTube and losslessswitcher is reading YouTube sample rate correctly (I'm not sure if it is or not).
  • Suggestion: Allow for Music App and YouTube to have separate sample rate reading capabilities where you can have them both on at same time (switches correctly) or only have one on at a time. For example: Option 1) both Music App and YouTube Sample Rate changes automatically when you go back and forth. Option 2) Music App on, YouTube off. Option 3) YouTube on, Music app off.

Bitrate switches back to 48Khz

When choosing a new track or skipping to next track, the bit rate switches back to 48kHz even if the currently playing and next track is at a higher bitrate.
Suggest you keep the bitrate the same unless the new track is different from currently playing track.

  • this is on an M1 Pro MacBook Pro

Pause song until sample rate changes

I don't know if this is possible, but could you pause the song, change the sample rate and un-pause the song to avoid the hickup with the sample rate change?

Export current sample rate / bit depth to other apps

Running

$ osascript -e 'tell application "Music" to get properties of current track'

does not return correct sample-rate / bit-depth for lossless tracks.

LosslessSwitcher has the data, I there an easy way for it to make it available to other apps?

Random ideas how to do it:

  • Expose a HTTP GET endpoint that returns the current state
  • Write to a logfile, in a format that other apps can easily parse
  • Write state-changes to a .json (or similar) file
  • Write to a ZMQ PUB port

not changing in bit rate

when im playing song in 16bit of x sample rate, even when the bit rate changes to 24bit, it would stay on 16bit

request: allow to choose multiple devices to set the sample rate

Thank you for release this amazing app to solve sample rate problem for Apple Music.

I'm now using BlackHole to loopback audio to AudioUnit Host app like AULab and Hosting AU to use batter EQ plug-in and send the sound to USB DAC,but at now time LosslessSwitcher can only change one device's sample rate at one time, can you add multiple devices sample rate change function ?

Doesn't sync bit depth

Hi!

I don't even know if this is a bug, or simply an omission, but the app doesn't sync bit depth, only sample rate. So for example, if some song is 24/96, it syncs as 16/96.

LosslessSwitcher needs admin privileges?

I use Foobar2000 on an M1 MacMini under Ventura 13.0
I want to get an bit-perfect output - but Foobar2000 use the Mac Audio-MIDI-Settings.

I got an hint from Foobar2000 forum to use the LosslessSwitcher.

But I get this message:
"LosslessSwitcher requires Administrator privileges in order to detect each song's lossless sample rate in the Music app."

My working user on the Mac have no Administrator privileges, I do that for better security.

What should I do?

Have anyone tested LosslessSwitcher on an M1 ARM CPU Mac too?

Manual set current to detected

Support a manual option to apply the currently detected format.

If bit depth detection is disabled, only change the sample rate.

Beta 5 not worky

Hate to bring this assessment but I switched from Beta 4 to 5 and...it didnt work at all, just stuck on whatever my last setting was. Not a single track triggered a bitrate switch. I re-downloaded beta 4 and it immediately 'worked' again (other issues notwithstanding)

Currently using M1 macbook on MacOS Ventura

Why do I need this app?

I am using Chord Mojo DAC/Amp. Doesn't macOS Monterey (version 12.3.1) and Apple Music app support automatic switching of sample rates for device as per the song sample rate?

Thanks

About LosslessSwitcher will pre-switch sample rate

Dear Vincent Neo,

I would like to confirm if the following situation is normal. When I use the LosslessSwitcher, I found that if I am using the radio or playlist function, and the next song's sampling rate is different from the current playing song, the LosslessSwitcher will pre-switch to the next song's sample rate instead of waiting for the current song to finish playing before switching. Is this normal or is it considered a bug?

Best regards,
MDGSC

Bit depth not changing

On my 2021 16" MacBook Pro with M1 Pro chip, the app will change the bitrate but not the depth.

Thanks for writing this app!

Build 14 still switches Bit Depth when disabled

So been beta'ing Build 14 for the past day and find it constantly changes my bit depth, even with it unchecked. Trying turning it on and off to see if it made a difference, and it did not.

First noticed when I opened up Audio Devices and found it was set to 16-bit (instead of my usual 32-bit). Tried manually setting 32-bit several times and selected various different bitrates to trigger a switch, and every time it changed the depth along with it. As one final test before posting this, was listening to a 24/48 track, manually switched to 32/48, then played a 44.1/16 track...and LLS switched to 44/16

Setting my daily back to Build 11 for now

Doesn't work in macOS Ventura 13.6

Updated to Ventura 13.6 and switcher stopped switching. Restarted app, Music, and Mac multiple times, no avail. Stuck on 44.1 or 48. Tested with multiple songs.

Mac Studio
M2 Max

AirPlay compatibility

I stream Apple Music from my MacBook Pro to an Airport Express as DAC connected to an amplifier connected to my (external) speakers, but LosslessSwitcher reports that I'm using the MacBook Pro Speakers. Does this mean LosslessSwitcher isn't doing its thing?

limit max sample rate

Discussed in #39

Originally posted by 7enso November 8, 2022
My audio device is capable of playing at 192 kHz or more, my speakers are as well (digital in). Due to cable length issues the SPDIF signals get distorted above 96 kHz. So if the sample rate switches above 96 kHz I get distorted audio.

Therefore it would be VERY useful to limit the maximum sample rate to a specific value - al least for me.

I mplementation of that feature would be great!Thanks for the great work already :)

Selectable audio device defaulting

This may just be because I use an EQ software and a weird glitch, but this feature reverts to Default Device constantly. For example, if I open MIDI Setup to verify a bitrate, my selected device will reset. Sometimes I look up and see it just randomly went back to default from my chosen DAC. Really wish there was a way to make it stick to my DAC.

v1.1 build 7/beta 4

Bit Depth Switching of beta11 may have no sound

Bit Depth Switching of beta11 may have no sound, but the AM shows that it is playing. However, beta10 and earlier versions do not have this issue, although the switching speed is slower compared to beta11. My laptop is an M1 MacBook Air.

Music unpauses / starts playing on its own

Noticing an issue on the latest beta where music will start playing on its own

Quit the application and couldnt repeat it, enabled it again, paused a track, and it came back, so feel its related to LosslessSwitcher

  • Issue appears be related to other audio playing outside of Music. It wasnt playing as I started this thread, then I played 3 seconds with Preview of a video on my desktop, when I got back to typing Music started playing my paused track again
  • I tried it again, 3 seconds of desktop audio with Preview, then kill the video. A few seconds later Music starts playing.
  • Repeated the above with VLC, 4 seconds of a video playing, quit VLC, Music starts playing

Setting to toggle auto-switch

Similar to the option to toggle bit depth detection, support manual toggle for whether it attempts to auto-switch. If disabled, continue to do the detection but just dont apply sample rate or bit depth changes.

Unnecessary sample rate resets

Running Version 1.1 Build 14

Playing this album https://music.apple.com/au/album/beats-in-space-068-marie-davidson-dj-mix/1682148235 with LosslessSwitcher active, the sample rate seems to be reset at the start of every track causing at least one ~0.5 second audio dropout on my SMSL M500 external DAC

This happens on every track change, even though all tracks are 16-bit 44.1 kHz ALAC and no switching is necessary

When I quit LosslessSwitcher these dropouts are 100% gone

Would it simply be possible to only reset the sample rate if it's different from the last track that was played?

Manual sample rate override in menu

Discussed in #26

Originally posted by Justinwang677 July 6, 2022
Some app don't change automatically so it would be a good idea to add a sample rate changing directly in the drop down menu and also bit depth option too

Feature Request: Dolby Atmos Toggle?

Not sure how feasible this would be to implement but it would be nice to be able to toggle Dolby Atmos off and on in LosslessSwitcher instead of having to manually do it in the Apple Music preferences.

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.