Metadata-Version: 2.1
Name: rcaudio
Version: 0.0.2
Summary: A real-time audio recording & analyzing library
Home-page: https://github.com/mhy12345/rcaudio
Author: mhy12345
Author-email: maohanyang789@163.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown

# rcaudio : A Realtime Audio Recording & Analyzing Library

## Introduction 

**rcaudio** Rcaudio is a real-time audio analysis library that allows you to simply record audio through a microphone and analyze.

It supports real-time analysis of :

* The raw audio data
* Volume
* Beat Information

For chinese documentation : [中文文档](http://mhy12345.xyz/technology/rcaudio-documentation/)
## Installation

```bash
pip install rcaudio
```

## Usage

### CoreRecorder

`CoreRecorder` is used to fetch raw data. When started, the audio data will be stored in the `CoreRecorder.buffer`.

```python
from rcaudio import CoreRecorder
CR = CoreRecorder(
        time = 10, #How much time to record
        sr = 1000 #sample rate
        )
CR.start()
while True:
    if not CR.buffer.empty():
        x = CR.buffer.get()
        print('*'*int(abs(x)))
```

### SimpleRecorder

In most cases, we use `SimpleRecorder`.  For efficiency consideration, the `SimpleRecorder`  should only be instantiated once. 

This class can register several `Analyzer`. 

When the function `start()` called, It will begin to record through microphone, and refresh the status of all the `Analyzer`

### Analyzers

All class extended from `BaseAnalyzer` can be registered into `SimpleRecorder`. For example `VolumeAnalyzer` can get the current volume of the microphone.


```python
import time
from rcaudio import SimpleRecorder,VolumeAnalyzer

SR = SimpleRecorder()
VA = VolumeAnalyzer(rec_time = 1)
SR.register(VA)
SR.start()
while True:
    print("VOLUME : ",VA.get_volume())
    time.sleep(1)
```

And beat analyzer can predict the beats from the music. (However, there will be some delay.)

```python
SR = SimpleRecorder(sr = 20000)
BA = BeatAnalyzer(rec_time = 15, initial_bpm = 120, smooth_ratio = .8)
SR.register(BA)
SR.start()
while True:
    print(BA.block_until_next_beat())
```

A FeatureAnalyzer can use to generate all user defined acoustic features. Just override the `data_process` function. (Current function are the calculation of the *Zero Crossing Rate*.

```python
SR = SimpleRecorder(sr = 1000)
FA = FeatureAnalyzer(refresh_time = 1)
SR.register(FA)
SR.start()
cpos = 0
while True:
	if len(FA.result) > cpos:
		print(FA.result[cpos])
		cpos += 1
	time.sleep(.01)
```

## Some note

Most function has the time delay about 1-2 seconds. I did lot effort to let the BeatAnalyzer looked as it is real-time. However, for the `FeatureAnalyzer`, if the feature extraction function are too slow compare to the microphone recording, the dalay may become huge. Decrease the sample rates would be a solution, but better solution would be DIY a analyzer yourself.


