Giter VIP home page Giter VIP logo

audiopyle's People

Contributors

emkor avatar jkorzeniowski avatar mkorman9 avatar urxvtcd avatar ziemnior avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

hadryan

audiopyle's Issues

Coordinator - config storing in Redis

Coordinator may store its config in Redis. Example config is backblaze bucket access parameters. Also, it should read config stored in Redis at startup

Implement basic audio converter as service, phase 1

The next component is converter. Service should convert a given mp3 file in local filesystem to the mono wav file with 16 bit and 44.1 kHz spec, without splitting file. It should be configurable (dir with input files, dir for output files) and it should take filename as an argument. Also, during conversion, it should indicate that output file is still in writing phase - maybe append _conversion to its filename and remove it after process ends.

Coordinator - passing config

Add option of passing config (at container creation) to coordinator with multiple backblaze buckets access parameters

Find a way to serialize internal project models

Since we have some complex objects (containing other, nested objects) in our project and we need to serialize them in orders to store object instances in Redis etc, we need to find a way to do it effectively. One way is to implement to_json() in each of model-classes, other way would be to create some service to do it in one place, other one - create method which will map objects to JSONs recursively.

Pull constants out of classes

Most of constants currently are under classes (AudiopyleConst, for example). Time to get rid of those classes and define constants on the top level of a file, not inside class, and also fix calls to those constants.

Replace Docker ADD with COPY

Read some docs on Docker if my assumption is correct and COPY is more relevant than ADD, do changes accordingly and check the results with building docker images.

Xtracter - config passing

Xtracter should read config on container startup. Config may contain blacklisted vamp plugins, available Redis binds etc

Lack of GLIBC_2.14 required by some VAMP Plugins

While building on travis, few warnings come up about lack of GLIBC_2.14 and GLIBC_2.15. Although tests are fine, some of the plugins may not work properly. Try to find out how to update GLIBC or find more suitable docker image.

Introduce proper logging

For now we are using only simple print() to log some messages and events, but it is highly unprofessional and we should introduce some proper logging (python has this built-in). So the task is to replace print with proper logging and add more logs where its necessary.

Check if commons-docker is actually needed

Our docker build looks like this:
-- docker-base-image
-----commons
-----------coordinator
-----------xtracter
-----------persister

So, the coordinator, xtracter and persister are all based on commons image, which is based on docker-base-image. Building commons image is time-consuming, so maybe it would be better to actually just install commons python package while building coordinator, xtracter and persister. It would look like this:
-- docker-base-image
-----commons+coordinator
-----commons+xtracter
-----commons+persister

Scraper: create specification, research potential sources

Scraper is the next app for audiopyle system.
Base idea is to download song information (like album, artist etc., maybe tags?) from internet sources, like MusicBrainz, Last.fm, Spotify etc and store it in specified format. It would be useful for ML and for feature analysis.

Add type annotations

Since our project is growing quite rapidly, soon we will feel the pain of Python's dynamic types. The fix would be to add type annotations in each public method and function - this way, IntelliJ can infer types of arguments and outputs.

PostFeature: select granularity for each audio feature

With Visualizer it should be easy to determine how precise should feature extraction be. By default, most of features are extracted from blocks size of 1024 frames (about 1/40 of a second of track), which gives us ~12000 feature values per 5-minute track, and its obvious we do not need so many for most of the features.
Select the right precision for each of the track.

Finish implementing xtracter

Prepare xtracter - complete service which reads local .wav file and extracts features using vamp and store them in json file in preconfigured directory.

Optimize build & test process on Travis

Current build/test process is highly inefficient. It goes like this:

  • build commons docker image locally basing on pulled base debian 8 image
  • build xtracter docker image from DOWNLOADED commons docker image

We could make it more efficient by reusing locally built commons image.

Second thing is: lets assume in one push someone made changes to commons AND xtracter. During build process, commons docker image would be affected by just pushed changes, but xtracter image would be based on commons image downloaded from docker hub - so it would be outdated.

Persistence #1: MySQL DB

Prepare script to run docker locally with MySQL db instance accessible from outside the docker.

Protip:
docker run -p 3306:3306 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

Visualizer #1: create specification

We should have some GUI tool for visualizing extracted features, since there will be lot of work with them. The tool may not be perfect, since it would be our internal, but should have some basic features:

  • choosing track from db
  • show its waveform on timeline (load this as feature from DB and draw with html5)
  • allow user to select which feature to show for track and draw them accordingly on top of the waveform
  • maybe allow to play the track somehow(?)

Implement audio file selector

This is temporary service (will be used only on non-scalable installation) which should select next audio file to analyze, based on list of bucket files and list of already analyzed files in MySQL

Research docker linking mechanism

First concept assumes that once we run any docker container, we map its port with host port, and then pass that port to next docker container to make communication possible. For example, we map Redis Task Queue port to XXXX and Redis Results Queue port to YYYY and MySQL port to ZZZZ, and pass that ports to coordinator (XXXX), xtracters (XXXX to get tasks, YYYY to enable results submitting) and persister (YYYY to read results from cache, and ZZZZ to store results in mysql).

But maybe theres simpler way with usage of docker linking mechanisms?

Persistence #2: Create SQL DDL script

Create SQL DDL queries that will create tables for AudioFiles, Plugins, PluginOutputs, Analysis and Features. Also,extend script from Persistence #1 with executing the DDL query.

Visualizer #2: research frameworks

test out some frameworks for Visualizer and choose the one that fits our needs. The framework should allow to connect do DB, load features and draw them for user with HTML5.

Create B2 client

Create simple B2 client (b2api wrapper) in commons module; xtracter and coordinator will make use of it

Persister #4: connect with Redis

Persister should read Features stored in Redis as JSONs and convert them into Python objects. Then it should proceed to store them in DB with already implemented DAO.

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.