ahilss
ahilss on Hacker News
I’m the developer of Transitions DJ (
https://dj.app/). If anyone can connect me with the team at Apple Music, I would be interested in doing an integration.
Posted by
ahilss on Tuesday July 09, 2024 @04:42PM
from the show-hn dept.
https://stems.dj.app/
Music is separated into stems using a version of Demucs modified to support streaming. Pitched stems are then processed by a machine learning model trained to detect the fundamental frequencies in the music. Finally, the fundamental frequencies are post-processed and combined with magnitudes from the FFT to produce the visualization. A tempo detection model runs in parallel on the client to...
On the M1 Mac I actually measured lower CPU usage during audio playback on WASM compared to the native desktop version which uses Rosetta. I'm not sure if the slowness is due to Rosetta or a performance bug on the Mac port.
It's probably the most visible project using the wxWidgets framework and in the audio domain which fits well with my experience building the DJ app.
It is rendering using the 2D canvas API. There's a device context class (wxDC) for each wxWidgets port that implements primitive drawing ops (DrawLine, DrawText, etc). For the WASM port, I created a glue library in javascript [1] that wxDC calls into for each primitive.
[1] https://github.com/ahilss/wxWidgets-wasm/blob/master/build/w...
Posted by
ahilss on Friday September 02, 2022 @05:31AM
from the show-hn dept.
https://wavvy.app/
I originally developed a WASM port of wxWidgets for https://dj.app/. When it came time to open source wxWidgets-wasm, I decided to port another complex app as a test case, and Audacity seemed like the obvious choice. In the process, I also needed to write a new host API for PortAudio for playback and recording in the...
Posted by
ahilss on Friday August 26, 2022 @01:08PM
from the show-hn dept.
Posted by
ahilss on Thursday April 28, 2011 @08:54AM
from the vlsicad.ucsd.edu dept.
And another: Algorithm to predict football scores.
I believe they are using a non-standard crossover operator in this implementation. A standard crossover operator will generate some permutation of the genes of the two parents: either you inherit the gene from your mother or your father. This implementation creates a new gene that is a weighted average of the genes of the two parents. This will probably cause rapid convergence of the gene pool, which may or may not be intended. Changing Math.random() to Math.round(Math.random()) in crossVars would change this to the standard crossover operator. I'd be interested to see how this affects performance.
I would target people who are not completely satisfied with the competitor's product. If I see people tweeting competitors asking for feature X, where my product already has X, I will send them a message.
I haven’t tried a Bloom filter, but I think for my application, the simple bit array might give better performance. The nice thing about the bit array is it works great on the worst-case. After the user has typed in 3 or 4 characters of their query, the search space has been narrowed enough where the performance isn't an issue. It’s that first or second character when the search space is large that gives problems. Using the bit array in the single character case, the 1 to 1 mapping of characters to bits gives the result directly.
I recently used this algorithm for speeding up an iTunes style search function. Originally I did a strstr over every item in the database, but it wasn't quite fast enough. I precomputed a 32-bit mask - 1 bit per alphabetic char, 5 bits per digits, and the last bit for special characters - for every database item, and used that as an initial search filter. I only needed to use the more costly strstr on items that made it through this filter.