Commit b75d6a8b authored by Steve Tjoa's avatar Steve Tjoa

cleanup, better explanations

parent 5c70524d
{
"metadata": {
"name": "",
"signature": "sha256:192b3e3df17edf351eead6a15c46df3338b6faa3a8601240a7954615094c03e3"
"signature": "sha256:0c39aef785f81466fe4a14e5ae37752896439cc7ceb966b0f0cfcc61c8b8aff0"
},
"nbformat": 3,
"nbformat_minor": 0,
......@@ -16,31 +16,99 @@
"Pitch Transcription Exercise"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Goal: Given an input signal, \n",
"\n",
"1. identify each note (including pitch, start time, and duration), and \n",
"2. render the transcription to be played back as audio."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Imports:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import essentia\n",
"import essentia.standard as ess\n",
"loader = ess.MonoLoader(filename='../test/test.wav', sampleRate=44100)\n",
"import librosa"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Set figure size:"
]
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"rcParams['figure.figsize'] = (15, 6)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Read an input signal:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fs = 44100.0\n",
"loader = ess.MonoLoader(filename='../test/test.wav', sampleRate=fs)\n",
"signal_in = loader()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 75
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Play the signal:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Audio\n",
"#Audio(data=signal_in, rate=44100)"
"#Audio(data=signal_in, rate=44100) # may take a while to load"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 76
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given a signal, return onset times:"
]
},
{
"cell_type": "code",
......@@ -53,7 +121,14 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 77
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given an audio segment, return pitch:"
]
},
{
"cell_type": "code",
......@@ -63,7 +138,7 @@
"spectrum = ess.Spectrum()\n",
"\n",
"def get_pitch(segment):\n",
" if len(segment) < 4096:\n",
" if len(segment) < 4096: # hack to get around Essentia error\n",
" N = len(segment) if len(segment) % 2 == 0 else len(segment) - 1\n",
" else:\n",
" N = 4096\n",
......@@ -73,7 +148,14 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 78
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given a pitch, return a sine wave:"
]
},
{
"cell_type": "code",
......@@ -82,12 +164,19 @@
"def generate_sine(pitch, n_duration):\n",
" #print midi, f0\n",
" n = arange(n_duration)\n",
" return 0.2*sin(2*pi*pitch*n/44100.0)"
" return 0.2*sin(2*pi*pitch*n/fs)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 79
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given an input signal, transcribe it, and render the transcription using sine waves:"
]
},
{
"cell_type": "code",
......@@ -102,7 +191,7 @@
" onsets = get_onsets(signal_in)\n",
" \n",
" # for each onset\n",
" onsets = append(onsets, len(signal_in)/44100.0)\n",
" onsets = append(onsets, len(signal_in)/fs)\n",
" for i in range(len(onsets)-1):\n",
" # pitch detect each segment\n",
" n0 = int(onsets[i]*44100)\n",
......@@ -117,7 +206,14 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 80
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Transcribe:"
]
},
{
"cell_type": "code",
......@@ -128,20 +224,93 @@
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 81
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Write output to file:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#Audio(data=signal_out, rate=44100)\n",
"#Audio(data=sum([signal_out, signal_in], axis=0), rate=44100)\n",
"#Audio(data=signal_out, rate=fs)\n",
"#Audio(data=sum([signal_out, signal_in], axis=0), rate=fs)\n",
"ess.MonoWriter(filename='../test/out.wav')(signal_out)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 82
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the onsets:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plot(signal_in)\n",
"for onset in get_onsets(signal_in):\n",
" axvline(onset*fs, color='r')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x487c3d0>"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot the pitches:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"CQT = librosa.cqt(signal_in[fs:fs*8], fs, hop_length=4096, fmin=librosa.midi_to_hz(60), fmax=librosa.midi_to_hz(108))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"-c:1: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
"-c:1: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
"/usr/lib/python2.7/dist-packages/scipy/fftpack/basic.py:121: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" z = zeros(s,x.dtype.char)\n"
]
}
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"librosa.display.specshow(librosa.logamplitude(CQT), sr=fs, y_axis='cqt_note', fmin=librosa.midi_to_hz(60), fmax=librosa.midi_to_hz(120))"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
......@@ -149,8 +318,7 @@
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 82
"outputs": []
}
],
"metadata": {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment