# HG changeset patch # User Amine SEHILI # Date 1457380735 -3600 # Node ID 308c89235a2edafcc1f8e2271908f7e8a4c6722b # Parent 809df9157e1abb3b16ec2341f5ce9dd807189120 doc update diff -r 809df9157e1a -r 308c89235a2e INSTALL --- a/INSTALL Sun Mar 06 14:57:03 2016 +0100 +++ b/INSTALL Mon Mar 07 20:58:55 2016 +0100 @@ -1,3 +1,9 @@ +### Install via pip + sudo pip install auditok -python setup.py install +### Install the latest version on Github + + git clone https://github.com/amsehili/auditok.git + cd auditok + sudo python setup.py install diff -r 809df9157e1a -r 308c89235a2e auditok/util.py --- a/auditok/util.py Sun Mar 06 14:57:03 2016 +0100 +++ b/auditok/util.py Mon Mar 07 20:58:55 2016 +0100 @@ -269,13 +269,11 @@ `max_time`, `mt` : *(float)* maximum time (in seconds) to read. Default behavior: read until there is no more data available. - `record`, `rec` : *(bool)* save all read data in cache. Provide a navigable object which boasts a `rewind` method. Default = False. - `block_dur`, `bd` : *(float)* processing block duration in seconds. This represents the quantity of audio data to return each time the :func:`read` method is invoked. If `block_dur` is 0.025 (i.e. 25 ms) and the sampling @@ -291,12 +289,10 @@ is given, `hop_dur` will be set to `block_dur` which means that there will be no overlap between two consecutively read blocks. - `block_size`, `bs` : *(int)* number of samples to read each time the `read` method is called. Default: a block size that represents a window of 10ms, so for a sampling rate of 16000, the default `block_size` is 160 samples, for a rate of 44100, `block_size` = 441 samples, etc. - `hop_size`, `hs` : *(int)* determines the number of overlapping samples between two adjacent read windows. For a @@ -439,12 +435,12 @@ ads.close() data = b''.join(data) assert len(data) == int(ads.get_sampling_rate() * 2.25 * ads.get_sample_width() * ads.get_channels()) - """ + # copy user's dicionary (shallow copy) + kwargs = kwargs.copy() - - + # check and normalize keyword arguments ADSFactory._check_normalize_args(kwargs) block_dur = kwargs.pop("bd") @@ -455,9 +451,6 @@ audio_source = kwargs.pop("asrc") filename = kwargs.pop("fn") data_buffer = kwargs.pop("db") - - # normalize db sr, sw and ch - record = kwargs.pop("rec") # Case 1: an audio source is supplied @@ -574,10 +567,8 @@ def read(self): return self.audio_source.read(self.block_size) - - - - + + class ADSDecorator(AudioDataSource): """ Base decorator class for AudioDataSource objects. @@ -597,7 +588,6 @@ self.get_sample_width = self.ads.get_sample_width self.get_channels = self.ads.get_channels - def is_rewindable(self): return self.ads.is_rewindable @@ -614,14 +604,12 @@ self.ads.open() self._reinit() - @abstractmethod def _reinit(self): pass class OverlapADS(ADSDecorator): - """ A class for AudioDataSource objects that can read and return overlapping audio frames """ @@ -640,8 +628,6 @@ def _get_block_size(): return self._actual_block_size - #self.get_block_size = _get_block_size - def _read_first_block(self): # For the first call, we need an entire block of size 'block_size' @@ -675,8 +661,7 @@ self._cache = None return block - - + def read(self): pass @@ -690,9 +675,9 @@ self.get_sample_width() * \ self.get_channels() self.read = self._read_first_block - - - + + + class LimiterADS(ADSDecorator): """ A class for AudioDataSource objects that can read a fixed amount of data. @@ -724,10 +709,9 @@ self.get_sample_width() * \ self.get_channels() self._total_read_bytes = 0 + - - - + class RecorderADS(ADSDecorator): """ A class for AudioDataSource objects that can record all audio data they read, @@ -739,11 +723,9 @@ self._reinit() - def read(self): pass - def _read_and_rec(self): # Read and save read data block = self.ads.read() @@ -756,8 +738,7 @@ def _read_simple(self): # Read without recording return self.ads.read() - - + def rewind(self): if self._record: # If has been recording, create a new BufferAudioSource @@ -798,13 +779,8 @@ except TypeError: # work for 'str' in python 2 and python 3 return ''.join(data) - - - - - class AudioEnergyValidator(DataValidator): """ The most basic auditok audio frame validator. @@ -813,12 +789,13 @@ otherwise. :Parameters: - `sample_width` : int + + `sample_width` : *(int)* Number of bytes of one audio sample. This is used to convert data from `basestring` or `Bytes` to an array of floats. - `energy_threshold` : float - A threshold used to check whether an input data buffer is valid. + `energy_threshold` : *(float)* + A threshold used to check whether an input data buffer is valid. """ @@ -885,16 +862,15 @@ :Parameters: - `data` : either a string or a Bytes buffer - `data` is converted into a numerical arra using the `sample_width` - given in the constructor. + `data` : either a *string* or a *Bytes* buffer + `data` is converted into a numerical array using the `sample_width` + given in the constructor. :Retruns: - True if `log_energy` > `energy_threshold`, False otherwise. + True if `log_energy` >= `energy_threshold`, False otherwise. """ - signal = AudioEnergyValidator._convert(data, self.sample_width) return AudioEnergyValidator._signal_log_energy(signal) >= self._energy_threshold @@ -903,7 +879,4 @@ def set_energy_threshold(self, threshold): self._energy_threshold = threshold - - - - \ No newline at end of file + diff -r 809df9157e1a -r 308c89235a2e doc/conf.py --- a/doc/conf.py Sun Mar 06 14:57:03 2016 +0100 +++ b/doc/conf.py Mon Mar 07 20:58:55 2016 +0100 @@ -51,7 +51,7 @@ # General information about the project. project = u'auditok' -copyright = u'2015, Amine Sehili' +copyright = u'2015-2016, Amine Sehili' author = u'Amine Sehili' # The version info for the project you're documenting, acts as replacement for @@ -59,9 +59,9 @@ # built documents. # # The short X.Y version. -version = '0.1.4' +version = '0.1.5' # The full version, including alpha/beta/rc tags. -release = '0.1.4' +release = '0.1.5' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -112,7 +112,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinxdoc' +#html_theme = 'sphinxdoc' # on_rtd is whether we are on readthedocs.org diff -r 809df9157e1a -r 308c89235a2e doc/index.rst --- a/doc/index.rst Sun Mar 06 14:57:03 2016 +0100 +++ b/doc/index.rst Mon Mar 07 20:58:55 2016 +0100 @@ -19,13 +19,13 @@ However, if you want more features, the following packages are needed: -- `Pydub `_ : read audio files of popular audio formats (ogg, mp3, etc.) or extract audio from a video file +- `Pydub `_ : read audio files in popular audio formats (ogg, mp3, etc.) or extract audio from a video file. -- `PyAudio `_ : read audio data from the microphone and play back detections +- `PyAudio `_ : read audio data from the microphone and play back detections. -- `matplotlib `_ : plot audio signal and detections (see figures above) +- `matplotlib `_ : plot audio signal and detections (see figures above). -- `numpy `_ : required by matplotlib. Also used for math operations instead of standard python if available +- `numpy `_ : required by matplotlib. Also used for math operations instead of standard python if available. - Optionally, you can use **sox** or **parecord** for data acquisition and feed **auditok** using a pipe. @@ -34,12 +34,17 @@ .. code:: bash + sudo pip install auditok + + +or install the latest version on Github: + +.. code:: bash + git clone https://github.com/amsehili/auditok.git cd auditok sudo python setup.py install - - Getting started --------------- @@ -50,7 +55,6 @@ Command-line Usage Guide API Tutorial - API Reference ------------- @@ -62,7 +66,6 @@ auditok.io auditok.dataset - Indices and tables ================== * :ref:`genindex` diff -r 809df9157e1a -r 308c89235a2e setup.py --- a/setup.py Sun Mar 06 14:57:03 2016 +0100 +++ b/setup.py Mon Mar 07 20:58:55 2016 +0100 @@ -10,7 +10,7 @@ with open('auditok/__init__.py', 'rt') as f: version = str(ast.literal_eval(_version_re.search( f.read()).group(1))) - long_desc = open('quickstart.rst', 'rt').read() + long_desc = open('doc/index.rst', 'rt').read() else: with open('auditok/__init__.py', 'rb') as f: