2020-09-28 22:56:54 +00:00
|
|
|
# (Audio Analysis | redis ) == <3
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
Redilysis sends audio analysis to a redis server.
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
The idea is to share a single audio analysis to many Visual Jockey filters, in our case for lasers.
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
**Two modes are available, so you might need to run two processes for full analysis.**
|
2020-09-27 19:02:19 +00:00
|
|
|
|
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
### Redis Keys and Contents
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
Each **word in bold** is a key which you can query the redis server for. Ex:
|
|
|
|
```
|
|
|
|
$ redis-cli get spectrum_120
|
|
|
|
"[2.21, 0.56, 0.51, 0.32, 0.27, 0.21, 0.18, 0.17, 0.18, 0.23]"
|
|
|
|
```
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
**rms**
|
|
|
|
* **Mode** spectrum
|
|
|
|
* **Type** float number
|
|
|
|
* **Length** scalar
|
|
|
|
* **Meaning** Represents the root-mean-square -a mean value- for all frequencies between ```C0``` and ```C9```, e.g. between 12Hz and 8,372Hz.
|
|
|
|
* **Use** A fairly basic information about the scene audio volume.
|
|
|
|
* **Example**
|
|
|
|
* ```"0.12"```
|
|
|
|
* The audio volume for the scene is pretty low.
|
|
|
|
* It is obtained by averaging the RMS of every audio frame during the capture.
|
|
|
|
|
|
|
|
**spectrum_10**
|
|
|
|
* **Mode** spectrum
|
|
|
|
* **Type** array of float numbers (0.0-10.0)
|
|
|
|
* **Length** 10
|
|
|
|
* **Meaning** Represents the audio volume for the 10 **octaves** between ```C0``` and ```C9```, e.g. between 12Hz and 8,372Hz.
|
|
|
|
* **Use** A simple and useful way to get a global idea of the sound landscape.
|
|
|
|
* **Example**
|
|
|
|
* ```"[2.21, 0.56, 0.51, 0.32, 0.27, 0.21, 0.18, 0.17, 0.18, 0.23]"```
|
|
|
|
* The audio volume for the `C4` octave is `spectrum_10[4]`.
|
|
|
|
* That value being `0.27` is pretty low meaning almost no audio volume for that octave.
|
|
|
|
* It is calculated by averaging the volume of the octave's notes, e.g. `C4, D4, D#4, E4, F4, F#4, G4, G#4, A4, A#4, B4`.
|
|
|
|
|
|
|
|
**spectrum_120**
|
|
|
|
* **Mode** spectrum
|
|
|
|
* **Type** array of float numbers (0.0-10.0)
|
|
|
|
* **Length** 120
|
|
|
|
* **Meaning** Represents the audio volume for the 120 **notes** between ```C0``` and ```C9```, e.g. between 12Hz and 8,372Hz.
|
|
|
|
* **Use** More detailed than spectrum_10, it allows to find the standing out notes of the audio landscape.
|
|
|
|
* **Example**
|
|
|
|
* ```"[5.55, 2.61, 2.49, 1.79, 2.09, 4.35, 1.99, 1.57, 1.47, 0.77, 0.91, 0.89, 0.85, 0.56, 0.53, 0.73, 0.53, 0.46, 0.43, 0.44, 0.27, 0.45, 0.7, 0.81, 0.98, 0.7, 0.71, 0.6, 0.83, 0.51, 0.32, 0.31, 0.33, 0.24, 0.25, 0.33, 0.39, 0.43, 0.51, 0.28, 0.27, 0.25, 0.38, 0.25, 0.27, 0.3, 0.2, 0.27, 0.35, 0.29, 0.34, 0.3, 0.27, 0.27, 0.22, 0.21, 0.21, 0.29, 0.22, 0.28, 0.18, 0.19, 0.25, 0.26, 0.25, 0.24, 0.2, 0.21, 0.19, 0.18, 0.19, 0.17, 0.2, 0.17, 0.18, 0.17, 0.15, 0.17, 0.19, 0.18, 0.21, 0.16, 0.16, 0.18, 0.15, 0.13, 0.14, 0.16, 0.2, 0.17, 0.17, 0.2, 0.18, 0.16, 0.18, 0.15, 0.15, 0.16, 0.16, 0.19, 0.19, 0.19, 0.17, 0.18, 0.17, 0.19, 0.23, 0.23, 0.2, 0.23, 0.24, 0.36, 0.34, 0.23, 0.22, 0.2, 0.19, 0.18, 0.21, 0.21]"```
|
|
|
|
* The audio volume for the `C2` note is `spectrum_10[23]` (12x2 - 1).
|
|
|
|
* That value being `0.81` is average meaning there is some audio volume for that octave.
|
2020-09-27 19:02:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
bpm
|
|
|
|
* **Mode** bpm
|
|
|
|
* **Type**
|
|
|
|
* **Length**
|
|
|
|
* **Meaning** Represents
|
|
|
|
* **Use**
|
|
|
|
* **Example**
|
|
|
|
|
|
|
|
bpm_sample_interval
|
|
|
|
* **Mode** bpm
|
|
|
|
* **Type**
|
|
|
|
* **Length**
|
|
|
|
* **Meaning** Represents
|
|
|
|
* **Example**
|
|
|
|
|
|
|
|
bpm_delay
|
|
|
|
* **Mode** bpm
|
|
|
|
* **Type**
|
|
|
|
* **Length**
|
|
|
|
* **Meaning** Represents
|
|
|
|
* **Example**
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
beats
|
|
|
|
* **Mode** bpm
|
|
|
|
* **Type**
|
|
|
|
* **Length**
|
|
|
|
* **Meaning** Represents
|
|
|
|
* **Example**
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
### Requirements and installation
|
2020-09-27 19:02:19 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
* python 2.7
|
|
|
|
* audio card
|
|
|
|
* redis server
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
#### Installation
|
2019-06-20 20:20:46 +00:00
|
|
|
|
|
|
|
```python
|
2020-09-28 22:56:54 +00:00
|
|
|
sudo apt install python-pyaudio python
|
2019-06-20 20:20:46 +00:00
|
|
|
git clone https://git.interhacker.space/tmplab/redilysis.git
|
|
|
|
cd redilysis
|
|
|
|
pip install -r requirements.txt
|
2020-09-28 22:56:54 +00:00
|
|
|
python redilysis.py --help
|
2019-06-20 20:20:46 +00:00
|
|
|
```
|
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
### Running in Spectrum Mode
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
```
|
|
|
|
python redilysis.py -m spectrum
|
|
|
|
```
|
|
|
|
This is the default mode.
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
It performs some frequency analysis (Fast Fourier Transform) to detect "energy" in the human audition bandwidths.
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
It will record if there is sound and at which frequencies.
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
It can run at sub-second frequency (100ms) with no problem.
|
|
|
|
|
|
|
|
It reports realistic data: spectrum analysis is the easy part.
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
### Running in BPM Mode
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
```
|
|
|
|
python redilysis.py -m bpm -s 0.5
|
|
|
|
```
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
This mode is experimental.
|
2019-06-20 20:20:46 +00:00
|
|
|
|
2020-09-28 22:56:54 +00:00
|
|
|
It attempts to detect beats based on complex parameters.
|
2019-06-20 20:20:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|