Aircox Programs
This application defines all base models and basic control of them. We have:
- Nameable: generic class used in any class needing to be named. Includes some utility functions;
 - Station: a station
 - Program: the program itself;
 - Diffusion: occurrence of a program planified in the timetable. For rerun, informations are bound to the initial diffusion;
 - Schedule: describes diffusions frequencies for each program;
 - Track: track informations in a playlist of a diffusion;
 - Sound: information about a sound that can be used for podcast or rerun;
 - Log: logs
 
Architecture
A Station is basically an object that represent a radio station. On each station, we use the Program object, that is declined in two different types:
- Scheduled: the diffusion is based on a timetable and planified through one Schedule or more; Diffusion object represent the occurrence of these programs;
 - Streamed: the diffusion is based on random playlist, used to fill gaps between the programs;
 
Each program has a directory in AIRCOX_PROGRAMS_DIR; For each, subdir:
- archives: complete episode record, can be used for diffusions or as a podcast
 - excerpts: excerpt of an episode, or other elements, can be used as a podcast
 
manage.py's commands
- diffusions: update/create, check and clean diffusions based on programs schedules;
 - import_playlist: import a playlist from a csv file, and associate it to a sound;
 - sound_monitor: check for existing and missing sounds files in programs directories and synchronize the database. It can check for the quality of file and update sound info.
 - sound_quality_check: check for the quality of the file (don't update database);
 - streamer: audio stream generation and control it;
 
Requirements
- Sox (and soxi): sound file monitor and quality check
 - requirements.txt for python's dependecies