Ismir2012SoftwareSessionPlan » History » Version 8
Version 7 (Luis Figueira, 2012-10-03 01:43 PM) → Version 8/12 (Luis Figueira, 2012-10-03 01:53 PM)
h1. Ismir2012: Software Session Plan
h2. Length and plan
* 90 min (75 + 15m interval)
h2. Software Requirements
* Python
* Numpy
* Matplotlib
* Nose and Nosetests
* ipython (desirable, not mandatory)
h2. Repository
https://code.soundsoftware.ac.uk/hg/python-tutorial-skeleton
h2. Script
* Clone/Check if repository was successfully cloned
* Explore folder and files
* Launch python shell (ipyhon)
* import audiofile.py and plot samples
* Explain what the test files are and introduction to nose
* Create estimate_tempo.py (main programme)
<pre>
import tempo_estimator as est
import sys
filename = sys.argv[1]
tempo = est.estimate_tempo_of_file(filename)
</pre>
* Easy Mercurial:
** ignore pyc and py~
** commit estimate_tempo.py
** commit .hgignore
* Create estimate_tempo.py
* Create test file test_estimate_tempo.py
<pre>
import estimate_tempo as est
def test_tempo_120bpm():
tempo = est.estimate_tempo_of_file("test files/120bpm.wav")
# we consider the test to be passed if error is less than 1/4 of bpm
error = abs(tempo - 120) < 0.25
assert
</pre>
* Commit both files
* Start writing the code of tempo_estimator.py
<pre>
</pre>
*** *Slide*: * Slide: how to detect tempo?
*** *Slide*: how our estimator will work
* Write the onset detection function and autocorrelation function calls in tempo_estimator.py
<pre></pre>
* Commit
* Python Shell:
** import the audiofile module
** load the audiofile
<pre>
import audiofile as af
(samples, samplerate) = af.read_all_read_all_mono_samples_from_file('test files/beatbox.wav')
</pre>
** split the file into non overlapping blocks and calculate the RMS of each
** Hot to calculate the RMS?
** Create signal_processing.py and test_signal_processing.py
*** *Slide*: how our estimator will work
** ipython: write rms function
<pre>
import numpy as np
def rms(array):
return np.sqrt(np.mean(samples**2)) sqrt(np.mean(samples**2))
</pre>
** write RMS tests
** paste RMS test rms function to signal_processing.py working
** nosetests signal_processing.py
** paste it to tempo_estimator.py and build a couple of tests
h2. Length and plan
* 90 min (75 + 15m interval)
h2. Software Requirements
* Python
* Numpy
* Matplotlib
* Nose and Nosetests
* ipython (desirable, not mandatory)
h2. Repository
https://code.soundsoftware.ac.uk/hg/python-tutorial-skeleton
h2. Script
* Clone/Check if repository was successfully cloned
* Explore folder and files
* Launch python shell (ipyhon)
* import audiofile.py and plot samples
* Explain what the test files are and introduction to nose
* Create estimate_tempo.py (main programme)
<pre>
import tempo_estimator as est
import sys
filename = sys.argv[1]
tempo = est.estimate_tempo_of_file(filename)
</pre>
* Easy Mercurial:
** ignore pyc and py~
** commit estimate_tempo.py
** commit .hgignore
* Create estimate_tempo.py
* Create test file test_estimate_tempo.py
<pre>
import estimate_tempo as est
def test_tempo_120bpm():
tempo = est.estimate_tempo_of_file("test files/120bpm.wav")
# we consider the test to be passed if error is less than 1/4 of bpm
error = abs(tempo - 120) < 0.25
assert
</pre>
* Commit both files
* Start writing the code of tempo_estimator.py
<pre>
</pre>
*** *Slide*: * Slide: how to detect tempo?
*** *Slide*: how our estimator will work
* Write the onset detection function and autocorrelation function calls in tempo_estimator.py
<pre></pre>
* Commit
* Python Shell:
** import the audiofile module
** load the audiofile
<pre>
import audiofile as af
(samples, samplerate) = af.read_all_read_all_mono_samples_from_file('test files/beatbox.wav')
</pre>
** split the file into non overlapping blocks and calculate the RMS of each
** Hot to calculate the RMS?
** Create signal_processing.py and test_signal_processing.py
*** *Slide*: how our estimator will work
** ipython: write rms function
<pre>
import numpy as np
def rms(array):
return np.sqrt(np.mean(samples**2)) sqrt(np.mean(samples**2))
</pre>
** write RMS tests
** paste RMS test rms function to signal_processing.py working
** nosetests signal_processing.py
** paste it to tempo_estimator.py and build a couple of tests