JK updates
This commit is contained in:
@@ -277,7 +277,7 @@ In [2]:
|
||||
</div>
|
||||
</div>
|
||||
<p>Load source and target databases for matching...</p>
|
||||
<div class="nbinput nblast container">
|
||||
<div class="nbinput container">
|
||||
<div class="highlight-none"><div class="highlight"><pre>
|
||||
In [3]:
|
||||
</pre></div>
|
||||
@@ -298,6 +298,39 @@ In [3]:
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nboutput nblast container">
|
||||
<div class="container">
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="highlight"><pre>
|
||||
<span class="ansired">---------------------------------------------------------------------------</span>
|
||||
<span class="ansired">IOError</span> Traceback (most recent call last)
|
||||
<span class="ansigreen"><ipython-input-3-9c41c481744c></span> in <span class="ansicyan"><module></span><span class="ansiblue">()</span>
|
||||
<span class="ansigreen"> 4</span> config<span class="ansiblue">=</span>matching_config<span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 5</span> )
|
||||
<span class="ansigreen">----> 6</span><span class="ansired"> </span>source_database<span class="ansiblue">.</span>load_database<span class="ansiblue">(</span>reanalyse<span class="ansiblue">=</span>True<span class="ansiblue">)</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 7</span> target_database = AudioDatabase(
|
||||
<span class="ansigreen"> 8</span> target_dir<span class="ansiblue">,</span><span class="ansiblue"></span>
|
||||
|
||||
<span class="ansigreen">/Users/samuelperry/PerryPerrySource/pysource/sppysound/src/sppysound/database.pyc</span> in <span class="ansicyan">load_database</span><span class="ansiblue">(self, reanalyse)</span>
|
||||
<span class="ansigreen"> 119</span> self<span class="ansiblue">.</span>organize_audio<span class="ansiblue">(</span>subdir_paths<span class="ansiblue">,</span> symlink<span class="ansiblue">=</span>self<span class="ansiblue">.</span>config<span class="ansiblue">.</span>database<span class="ansiblue">[</span><span class="ansiblue">"symlink"</span><span class="ansiblue">]</span><span class="ansiblue">)</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 120</span> <span class="ansiblue"></span>
|
||||
<span class="ansigreen">--> 121</span><span class="ansired"> </span>self<span class="ansiblue">.</span>analyse_database<span class="ansiblue">(</span>subdir_paths<span class="ansiblue">,</span> reanalyse<span class="ansiblue">)</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 122</span> <span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 123</span> <span class="ansigreen">def</span> analyse_database<span class="ansiblue">(</span>self<span class="ansiblue">,</span> subdir_paths<span class="ansiblue">,</span> reanalyse<span class="ansiblue">)</span><span class="ansiblue">:</span><span class="ansiblue"></span>
|
||||
|
||||
<span class="ansigreen">/Users/samuelperry/PerryPerrySource/pysource/sppysound/src/sppysound/database.pyc</span> in <span class="ansicyan">analyse_database</span><span class="ansiblue">(self, subdir_paths, reanalyse)</span>
|
||||
<span class="ansigreen"> 140</span> <span class="ansiblue">"corrupted HDF5 file.\n Make sure this is the only "</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 141</span> <span class="ansiblue">"running instance and regenerate HDF5 if "</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen">--> 142</span><span class="ansired"> "neccesary.".format(datapath))
|
||||
</span><span class="ansigreen"> 143</span> self<span class="ansiblue">.</span>analysed_audio <span class="ansiblue">=</span> <span class="ansiblue">[</span><span class="ansiblue">]</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 144</span> <span class="ansiblue"></span>
|
||||
|
||||
<span class="ansired">IOError</span>: Unable to create/append to file: ./ExampleDatabase/data/analysis_data.hdf5
|
||||
This may be due to another instance of this program running or a corrupted HDF5 file.
|
||||
Make sure this is the only running instance and regenerate HDF5 if neccesary.
|
||||
</pre></div></div>
|
||||
</div>
|
||||
<p>An output database must also be defined. This is to store matching
|
||||
results and synthesis results generated later. Note that an analysis
|
||||
list was not defined for this as it will not be analysed</p>
|
||||
@@ -328,7 +361,7 @@ perform matching. The rematch argument can be set to discard any
|
||||
previously found matches from pre-existing HDF5 files, otherwise
|
||||
previously found matches will cause the program to terminate for their
|
||||
preservation.</p>
|
||||
<div class="nbinput nblast container">
|
||||
<div class="nbinput container">
|
||||
<div class="highlight-none"><div class="highlight"><pre>
|
||||
In [6]:
|
||||
</pre></div>
|
||||
@@ -344,11 +377,28 @@ In [6]:
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nboutput nblast container">
|
||||
<div class="container">
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="highlight"><pre>
|
||||
<span class="ansired">---------------------------------------------------------------------------</span>
|
||||
<span class="ansired">NameError</span> Traceback (most recent call last)
|
||||
<span class="ansigreen"><ipython-input-6-a85bd403c2df></span> in <span class="ansicyan"><module></span><span class="ansiblue">()</span>
|
||||
<span class="ansigreen"> 1</span> matcher = Matcher(
|
||||
<span class="ansigreen"> 2</span> source_database<span class="ansiblue">,</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen">----> 3</span><span class="ansired"> </span>target_database<span class="ansiblue">,</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 4</span> output_db<span class="ansiblue">=</span>output_database<span class="ansiblue">,</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 5</span> config<span class="ansiblue">=</span>matching_config<span class="ansiblue">,</span><span class="ansiblue"></span>
|
||||
|
||||
<span class="ansired">NameError</span>: name 'target_database' is not defined
|
||||
</pre></div></div>
|
||||
</div>
|
||||
<p>The matching is then run using the brute force matcher method. Other
|
||||
methods are not currently available.</p>
|
||||
<p>Warnings may be produced during this process. These will be silenced in
|
||||
a future revision but do not affect results.</p>
|
||||
<div class="nbinput nblast container">
|
||||
<div class="nbinput container">
|
||||
<div class="highlight-none"><div class="highlight"><pre>
|
||||
In [7]:
|
||||
</pre></div>
|
||||
@@ -360,6 +410,21 @@ In [7]:
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nboutput nblast container">
|
||||
<div class="container">
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="highlight"><pre>
|
||||
<span class="ansired">---------------------------------------------------------------------------</span>
|
||||
<span class="ansired">NameError</span> Traceback (most recent call last)
|
||||
<span class="ansigreen"><ipython-input-7-f0cece17161b></span> in <span class="ansicyan"><module></span><span class="ansiblue">()</span>
|
||||
<span class="ansigreen">----> 1</span><span class="ansired"> matcher.match(
|
||||
</span><span class="ansigreen"> 2</span> matcher<span class="ansiblue">.</span>kdtree_matcher<span class="ansiblue">,</span><span class="ansiblue"></span>
|
||||
<span class="ansigreen"> 3</span> )
|
||||
|
||||
<span class="ansired">NameError</span>: name 'matcher' is not defined
|
||||
</pre></div></div>
|
||||
</div>
|
||||
<p>The output database will now contain a HDF5 file containing matching
|
||||
data for the two databases. This can be used to synthesize results.</p>
|
||||
<p>The matching_config file for this demo is:</p>
|
||||
|
||||
@@ -880,6 +880,13 @@ a Nan matched to any other value is calculated as the furthest match +
|
||||
<dt id="database.Synthesizer">
|
||||
<em class="property">class </em><code class="descclassname">database.</code><code class="descname">Synthesizer</code><span class="sig-paren">(</span><em>database1</em>, <em>database2</em>, <em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="modules/database.html#Synthesizer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#database.Synthesizer" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>An object used for synthesizing output based on grain matching.</p>
|
||||
<dl class="method">
|
||||
<dt id="database.Synthesizer.enforce_intensity">
|
||||
<code class="descname">enforce_intensity</code><span class="sig-paren">(</span><em>grain</em>, <em>source_sample</em>, <em>source_grain_ind</em>, <em>target_sample</em>, <em>target_grain_ind</em><span class="sig-paren">)</span><a class="headerlink" href="#database.Synthesizer.enforce_intensity" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Scales the amplitude of the grain by the difference between it’s intensity and the intensity of the grain specified.</p>
|
||||
<p>This method will fail if either AnalysedAudioFile object does not have any intensity analyses.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="database.Synthesizer.enforce_pitch">
|
||||
<code class="descname">enforce_pitch</code><span class="sig-paren">(</span><em>grain</em>, <em>source_sample</em>, <em>source_grain_ind</em>, <em>target_sample</em>, <em>target_grain_ind</em><span class="sig-paren">)</span><a class="headerlink" href="#database.Synthesizer.enforce_pitch" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -887,13 +894,6 @@ a Nan matched to any other value is calculated as the furthest match +
|
||||
<p>This method will fail if either AnalysedAudioFile object does not have an f0 analysis.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="database.Synthesizer.enforce_rms">
|
||||
<code class="descname">enforce_rms</code><span class="sig-paren">(</span><em>grain</em>, <em>source_sample</em>, <em>source_grain_ind</em>, <em>target_sample</em>, <em>target_grain_ind</em><span class="sig-paren">)</span><a class="headerlink" href="#database.Synthesizer.enforce_rms" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Scales the amplitude of the grain by the difference between it’s rms and the rms of the grain specified.</p>
|
||||
<p>This method will fail if either AnalysedAudioFile object does not have an rms analysis.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="database.Synthesizer.swap_databases">
|
||||
<code class="descname">swap_databases</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#database.Synthesizer.swap_databases" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -914,7 +914,7 @@ audio in the output database.</p>
|
||||
<h2>Analysis Classes<a class="headerlink" href="#analysis-classes" title="Permalink to this headline">¶</a></h2>
|
||||
<dl class="class">
|
||||
<dt id="analysis.Analysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">Analysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>name</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/Analysis.html#Analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.Analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">Analysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>name</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/Analysis.html#Analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.Analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Basic descriptor class to build analyses on.</p>
|
||||
<p>The Analysis base class works as an interface between child descriptor
|
||||
objects and the HDF5 storage file. This is designed to seperate descriptor
|
||||
@@ -965,7 +965,7 @@ file.</p>
|
||||
<h3>Centroid Analysis Class<a class="headerlink" href="#centroid-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.CentroidAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">CentroidAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/CentroidAnalysis.html#CentroidAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.CentroidAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">CentroidAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/CentroidAnalysis.html#CentroidAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.CentroidAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Temporal centroid descriptor class for generation of temporal centroid
|
||||
audio analysis.</p>
|
||||
<p>This descriptor calculates the temporal centroid for overlapping grains of
|
||||
@@ -1003,7 +1003,7 @@ save to disk.</p>
|
||||
<h3>F0 Analysis Class<a class="headerlink" href="#f0-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.F0Analysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">F0Analysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/F0Analysis.html#F0Analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.F0Analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">F0Analysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/F0Analysis.html#F0Analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.F0Analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>F0 analysis descriptor class for generation of fundamental frequency
|
||||
estimation.</p>
|
||||
<p>This descriptor calculates the fundamental frequency for overlapping grains
|
||||
@@ -1029,7 +1029,7 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.F0Analysis.create_f0_analysis">
|
||||
<em class="property">static </em><code class="descname">create_f0_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>samplerate</em>, <em>window_size=512</em>, <em>overlapFac=0.5</em>, <em>m0=None</em>, <em>M=None</em><span class="sig-paren">)</span><a class="headerlink" href="#analysis.F0Analysis.create_f0_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_f0_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>samplerate</em>, <em>window_size=512</em>, <em>overlapFac=0.5</em>, <em>threshold=0.0</em>, <em>m0=None</em>, <em>M=None</em><span class="sig-paren">)</span><a class="headerlink" href="#analysis.F0Analysis.create_f0_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Generate F0 contour analysis.</p>
|
||||
<p>Calculate the frequency and harmonic ratio values of windowed segments
|
||||
of the audio file and save to disk.</p>
|
||||
@@ -1056,7 +1056,7 @@ size containing frames for these times.</p>
|
||||
<h3>FFT Analysis Class<a class="headerlink" href="#fft-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.FFTAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">FFTAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/FFTAnalysis.html#FFTAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.FFTAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">FFTAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/FFTAnalysis.html#FFTAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.FFTAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>FFT analysis descriptor class for generation of FFT spectral analysis.</p>
|
||||
<p>This descriptor calculates the spectral content for overlapping grains
|
||||
of an AnalysedAudioFile object. A full definition of FFT analysis can be
|
||||
@@ -1075,7 +1075,7 @@ analysis.</li>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="analysis.FFTAnalysis.create_fft_analysis">
|
||||
<code class="descname">create_fft_analysis</code><span class="sig-paren">(</span><em>window_size=512</em>, <em>window_overlap=2</em>, <em>window_type='hanning'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/FFTAnalysis.html#FFTAnalysis.create_fft_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.FFTAnalysis.create_fft_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="descname">create_fft_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>window_size=512</em>, <em>window_overlap=2</em>, <em>window_type='hanning'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/FFTAnalysis.html#FFTAnalysis.create_fft_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.FFTAnalysis.create_fft_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create a spectral analysis for overlapping frames of audio.</p>
|
||||
</dd></dl>
|
||||
|
||||
@@ -1108,7 +1108,7 @@ file.</p>
|
||||
<h3>Harmonic Ratio Analysis Class<a class="headerlink" href="#harmonic-ratio-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.F0HarmRatioAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">F0HarmRatioAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/F0HarmRatioAnalysis.html#F0HarmRatioAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.F0HarmRatioAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">F0HarmRatioAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/F0HarmRatioAnalysis.html#F0HarmRatioAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.F0HarmRatioAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The F0 HarmRatio analysis object is a placeholder class to allow access to
|
||||
the harmonic ratio generated in the f0 analysis. As a result it does not
|
||||
have it’s own “create analysis method as other analyses do. it is designed
|
||||
@@ -1143,7 +1143,7 @@ size containing frames for these times.</p>
|
||||
<h3>Kurtosis Analysis Class<a class="headerlink" href="#kurtosis-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.KurtosisAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">KurtosisAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/KurtosisAnalysis.html#KurtosisAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.KurtosisAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">KurtosisAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/KurtosisAnalysis.html#KurtosisAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.KurtosisAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Kurtosis descriptor class for generation of Kurtosis audio analysis.</p>
|
||||
<p>This descriptor calculates the temporal kurtosis for overlapping grains of
|
||||
an AnalysedAudioFile object. A full definition of kurtosis analysis can be found
|
||||
@@ -1162,7 +1162,7 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.KurtosisAnalysis.create_kurtosis_analysis">
|
||||
<em class="property">static </em><code class="descname">create_kurtosis_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>variance</em>, <em>window_size=512</em>, <em>overlapFac=0.5</em><span class="sig-paren">)</span><a class="headerlink" href="#analysis.KurtosisAnalysis.create_kurtosis_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_kurtosis_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>variance</em>, <em>window_size=512</em>, <em>window=<function hann></em>, <em>overlapFac=0.5</em><span class="sig-paren">)</span><a class="headerlink" href="#analysis.KurtosisAnalysis.create_kurtosis_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Calculate the Kurtosis values of windowed segments of the audio file and
|
||||
save to disk.</p>
|
||||
</dd></dl>
|
||||
@@ -1180,7 +1180,7 @@ save to disk.</p>
|
||||
<h3>Peak Analysis Class<a class="headerlink" href="#peak-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.PeakAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">PeakAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/PeakAnalysis.html#PeakAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.PeakAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">PeakAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/PeakAnalysis.html#PeakAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.PeakAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Peak descriptor class for generation of per-grain maximum peak audio analysis.</p>
|
||||
<p>This descriptor calculates the maximum peak for overlapping grains of an
|
||||
AnalysedAudioFile object. A full definition of peak analysis can be found in
|
||||
@@ -1217,7 +1217,7 @@ save to disk.</p>
|
||||
<h3>RMS Analysis Class<a class="headerlink" href="#rms-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.RMSAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">RMSAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/RMSAnalysis.html#RMSAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.RMSAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">RMSAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/RMSAnalysis.html#RMSAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.RMSAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>RMS descriptor class for generation of RMS audio analysis.</p>
|
||||
<p>This descriptor calculates the Root Mean Square analysis for overlapping
|
||||
grains of an AnalysedAudioFile object. A full definition of RMS analysis
|
||||
@@ -1236,7 +1236,7 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.RMSAnalysis.create_rms_analysis">
|
||||
<em class="property">static </em><code class="descname">create_rms_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>samplerate</em>, <em>window_size=512</em>, <em>window=<function triang></em>, <em>overlapFac=0.5</em><span class="sig-paren">)</span><a class="headerlink" href="#analysis.RMSAnalysis.create_rms_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_rms_analysis</code><span class="sig-paren">(</span><em>frames</em>, <em>samplerate</em>, <em>window_size=512</em>, <em>window=<function hann></em>, <em>overlapFac=0.5</em><span class="sig-paren">)</span><a class="headerlink" href="#analysis.RMSAnalysis.create_rms_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Generate RMS contour analysis.</p>
|
||||
<p>Calculate the RMS values of windowed segments of the audio file and
|
||||
save to disk.</p>
|
||||
@@ -1255,7 +1255,7 @@ save to disk.</p>
|
||||
<h3>Spectral Centroid Analysis Class<a class="headerlink" href="#spectral-centroid-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.SpectralCentroidAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralCentroidAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCentroidAnalysis.html#SpectralCentroidAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCentroidAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralCentroidAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCentroidAnalysis.html#SpectralCentroidAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCentroidAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Spectral centroid descriptor class for generation of spectral centroid
|
||||
audio analysis.</p>
|
||||
<p>This descriptor calculates the spectral centroid for overlapping grains of
|
||||
@@ -1275,10 +1275,9 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.SpectralCentroidAnalysis.create_spccntr_analysis">
|
||||
<em class="property">static </em><code class="descname">create_spccntr_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>length</em>, <em>samplerate</em>, <em>output_format='freq'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCentroidAnalysis.html#SpectralCentroidAnalysis.create_spccntr_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCentroidAnalysis.create_spccntr_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_spccntr_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>samplerate</em>, <em>output_format='ind'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCentroidAnalysis.html#SpectralCentroidAnalysis.create_spccntr_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCentroidAnalysis.create_spccntr_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Calculate the spectral centroid of the fft frames.</p>
|
||||
<p>length: the length of the window used to calculate the FFT.
|
||||
samplerate: the samplerate of the audio analysed.
|
||||
<p>samplerate: the samplerate of the audio analysed.
|
||||
output_format = Choose either “freq” for output in Hz or “ind” for bin
|
||||
index output</p>
|
||||
</dd></dl>
|
||||
@@ -1296,7 +1295,7 @@ index output</p>
|
||||
<h3>Spectral Crest Factor Analysis Class<a class="headerlink" href="#spectral-crest-factor-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.SpectralCrestFactorAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralCrestFactorAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCrestFactorAnalysis.html#SpectralCrestFactorAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCrestFactorAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralCrestFactorAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCrestFactorAnalysis.html#SpectralCrestFactorAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCrestFactorAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Spectral crest factor descriptor class for generation of spectral crest
|
||||
factor audio analysis.</p>
|
||||
<p>This descriptor calculates the spectral crest factor for overlapping grains
|
||||
@@ -1316,12 +1315,8 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.SpectralCrestFactorAnalysis.create_spccf_analysis">
|
||||
<em class="property">static </em><code class="descname">create_spccf_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>length</em>, <em>samplerate</em>, <em>output_format='freq'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCrestFactorAnalysis.html#SpectralCrestFactorAnalysis.create_spccf_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCrestFactorAnalysis.create_spccf_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_spccf_analysis</code><span class="sig-paren">(</span><em>fft</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralCrestFactorAnalysis.html#SpectralCrestFactorAnalysis.create_spccf_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralCrestFactorAnalysis.create_spccf_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Calculate the spectral crest factor of the fft frames.</p>
|
||||
<p>length: the length of the window used to calculate the FFT.
|
||||
samplerate: the samplerate of the audio analysed.
|
||||
output_format = Choose either “freq” for output in Hz or “ind” for bin
|
||||
index output</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
@@ -1349,7 +1344,7 @@ index output</p>
|
||||
<h3>Spectral Flatness Analysis Class<a class="headerlink" href="#spectral-flatness-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.SpectralFlatnessAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralFlatnessAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFlatnessAnalysis.html#SpectralFlatnessAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFlatnessAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralFlatnessAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFlatnessAnalysis.html#SpectralFlatnessAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFlatnessAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Spectral flatness descriptor class for generation of spectral flatness
|
||||
audio analysis.</p>
|
||||
<p>This descriptor calculates the spectral flatness for overlapping grains of
|
||||
@@ -1369,12 +1364,8 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.SpectralFlatnessAnalysis.create_spcflatness_analysis">
|
||||
<em class="property">static </em><code class="descname">create_spcflatness_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>length</em>, <em>samplerate</em>, <em>output_format='freq'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFlatnessAnalysis.html#SpectralFlatnessAnalysis.create_spcflatness_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFlatnessAnalysis.create_spcflatness_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_spcflatness_analysis</code><span class="sig-paren">(</span><em>fft</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFlatnessAnalysis.html#SpectralFlatnessAnalysis.create_spcflatness_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFlatnessAnalysis.create_spcflatness_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Calculate the spectral flatness of the fft frames.</p>
|
||||
<p>length: the length of the window used to calculate the FFT.
|
||||
samplerate: the samplerate of the audio analysed.
|
||||
output_format = Choose either “freq” for output in Hz or “ind” for bin
|
||||
index output</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
@@ -1402,7 +1393,7 @@ index output</p>
|
||||
<h3>Spectral Flux Analysis Class<a class="headerlink" href="#spectral-flux-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.SpectralFluxAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralFluxAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFluxAnalysis.html#SpectralFluxAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFluxAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralFluxAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFluxAnalysis.html#SpectralFluxAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFluxAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Spectral flux descriptor class for generation of spectral flux audio
|
||||
analysis.</p>
|
||||
<p>This descriptor calculates the spectral flux for overlapping grains of an
|
||||
@@ -1422,10 +1413,9 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.SpectralFluxAnalysis.create_spcflux_analysis">
|
||||
<em class="property">static </em><code class="descname">create_spcflux_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>length</em>, <em>samplerate</em>, <em>output_format='freq'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFluxAnalysis.html#SpectralFluxAnalysis.create_spcflux_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFluxAnalysis.create_spcflux_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_spcflux_analysis</code><span class="sig-paren">(</span><em>fft</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralFluxAnalysis.html#SpectralFluxAnalysis.create_spcflux_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralFluxAnalysis.create_spcflux_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Calculate the spectral flux of the fft frames.</p>
|
||||
<p>length: the length of the window used to calculate the FFT.
|
||||
samplerate: the samplerate of the audio analysed.
|
||||
output_format = Choose either “freq” for output in Hz or “ind” for bin
|
||||
index output</p>
|
||||
</dd></dl>
|
||||
@@ -1455,7 +1445,7 @@ index output</p>
|
||||
<h3>Spectral Spread Analysis Class<a class="headerlink" href="#spectral-spread-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.SpectralSpreadAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralSpreadAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralSpreadAnalysis.html#SpectralSpreadAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralSpreadAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">SpectralSpreadAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralSpreadAnalysis.html#SpectralSpreadAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralSpreadAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Spectral spread descriptor class for generation of spectral spread audio
|
||||
analysis.</p>
|
||||
<p>This descriptor calculates the spectral spread for overlapping grains of an
|
||||
@@ -1475,7 +1465,7 @@ analysis.</li>
|
||||
|
||||
<dl class="staticmethod">
|
||||
<dt id="analysis.SpectralSpreadAnalysis.create_spcsprd_analysis">
|
||||
<em class="property">static </em><code class="descname">create_spcsprd_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>spectral_centroid</em>, <em>length</em>, <em>samplerate</em>, <em>output_format='freq'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralSpreadAnalysis.html#SpectralSpreadAnalysis.create_spcsprd_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralSpreadAnalysis.create_spcsprd_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">static </em><code class="descname">create_spcsprd_analysis</code><span class="sig-paren">(</span><em>fft</em>, <em>spectral_centroid</em>, <em>samplerate</em>, <em>output_format='ind'</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/SpectralSpreadAnalysis.html#SpectralSpreadAnalysis.create_spcsprd_analysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.SpectralSpreadAnalysis.create_spcsprd_analysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Calculate the spectral spread of the fft frames.</p>
|
||||
<p>fft: Real fft frames.
|
||||
spectral_centroid: spectral centroid frames (in index format).
|
||||
@@ -1508,7 +1498,7 @@ samplerate: the samplerate of the audio analysed.</p>
|
||||
<h3>Variance Analysis Class<a class="headerlink" href="#variance-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.VarianceAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">VarianceAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/VarianceAnalysis.html#VarianceAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.VarianceAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">VarianceAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/VarianceAnalysis.html#VarianceAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.VarianceAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Variance descriptor class for generation of variance audio analysis.</p>
|
||||
<p>This descriptor calculates the Root Mean Square analysis for overlapping
|
||||
grains of an AnalysedAudioFile object. A full definition of variance
|
||||
@@ -1546,7 +1536,7 @@ save to disk.</p>
|
||||
<h3>Zero-Crossing Analysis Class<a class="headerlink" href="#zero-crossing-analysis-class" title="Permalink to this headline">¶</a></h3>
|
||||
<dl class="class">
|
||||
<dt id="analysis.ZeroXAnalysis">
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">ZeroXAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/ZeroXAnalysis.html#ZeroXAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.ZeroXAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="descclassname">analysis.</code><code class="descname">ZeroXAnalysis</code><span class="sig-paren">(</span><em>AnalysedAudioFile</em>, <em>frames</em>, <em>analysis_group</em>, <em>config=None</em><span class="sig-paren">)</span><a class="reference internal" href="modules/analysis/ZeroXAnalysis.html#ZeroXAnalysis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#analysis.ZeroXAnalysis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Zero-corssing descriptor class for generation of zero-crossing rate
|
||||
analysis.</p>
|
||||
<p>This descriptor calculates the zero-crossing rate for overlapping grains of
|
||||
|
||||
+34
-33
@@ -279,7 +279,7 @@ descriptors would match audio based on it’s pitch and energy.</p>
|
||||
used to determine the central point of a signal’s amplitude and is calculated
|
||||
as:</p>
|
||||
<div class="math">
|
||||
\[C(n) = \frac{\sum_{i=i_s(n)}^{i_e(n)}(i-i_s(n)) \cdot x(i)}{\sum_{i=i_s(n)}^{i_e(n)} \cdot x(n)}\]</div>
|
||||
\[C(n) = \frac{\sum_{i=i_s(n)}^{i_e(n)}(i-i_s(n)) \cdot x(i)}{\sum_{i=i_s(n)}^{i_e(n)} \cdot x(n)}.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id1">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="f0-pitch-detection">
|
||||
@@ -294,18 +294,18 @@ reasonable versatility for a wide range of signals.</p>
|
||||
defined as:</p>
|
||||
<div class="math">
|
||||
\[R_n(m) = \sum_{i=i_s(n)}^{i_e(n)} x(i) x(i-m)\]</div>
|
||||
<p>Then normalizing:</p>
|
||||
<p>then normalizing:</p>
|
||||
<div class="math">
|
||||
\[\Gamma_n(m) = \frac{R_n(m)}{\sqrt{\sum_{i=i_s(n)}^{i_e(n)}x(i)^2 \sum_{i=i_s(n)}^{i_e(n)}x(i-m)^2}}\]</div>
|
||||
\[\Gamma_n(m) = \frac{R_n(m)}{\sqrt{\sum_{i=i_s(n)}^{i_e(n)}x(i)^2 \sum_{i=i_s(n)}^{i_e(n)}x(i-m)^2}}.\]</div>
|
||||
<p>The fundamental period of the signal is then calculated as the point between
|
||||
<span class="math">\(T_{min}\)</span> and <span class="math">\(T_{max}\)</span> at which the correlated signal most closely matches the
|
||||
original. <span class="math">\(T_{min}\)</span> and <span class="math">\(T_{max}\)</span> are defined as the minimum and maximum values of
|
||||
the fundamental period.</p>
|
||||
<div class="math">
|
||||
\[y = arg\,max_{T_{min} \leq m \leq T_{max}} \{\Gamma_i(m)\}\]</div>
|
||||
\[y = arg\,max_{T_{min} \leq m \leq T_{max}} \{\Gamma_i(m)\}.\]</div>
|
||||
<p>In order to improve the accuracy of peak detection, parabolic interpolation is
|
||||
used to estimate the peak’s location with greater accuracy by using the peak
|
||||
correlation and it’s two closes neighbour’s values to estimate the fractional
|
||||
correlation and it’s two closest neighbour’s values to estimate the fractional
|
||||
peak value.</p>
|
||||
<p>The method for parabolic interpolation is defined as:</p>
|
||||
<div class="math">
|
||||
@@ -316,7 +316,7 @@ peak value.</p>
|
||||
<p>Ref: <a class="reference internal" href="#smith2011sasp" id="id2">[Smi16]</a></p>
|
||||
<p>From this, the fundamental period the frequency is then calculated as:</p>
|
||||
<div class="math">
|
||||
\[f_0^n = \frac{1}{T_0^n}\]</div>
|
||||
\[f_0^n = \frac{1}{T_0^n}.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#itaa2014" id="id3">[GP14]</a></p>
|
||||
</div>
|
||||
<div class="section" id="fft">
|
||||
@@ -326,22 +326,22 @@ Fourier Transform for windows of a signal. The full description of this
|
||||
transform is outside the scope of this project, however it should be understood
|
||||
that this analysis provides a description of the spectral content of a windowed
|
||||
signal. By applying the transform, a number of bins of size <span class="math">\(K\)</span> are
|
||||
calculated that detail the sine and cosine apmlitudes required to reconstruct
|
||||
calculated that detail the sine and cosine amplitudes required to reconstruct
|
||||
the signal. The calculation of the STFT is defined as:</p>
|
||||
<div class="math">
|
||||
\[X(k,n) = \sum_{i=i_s(n)}^{i_e(n)} x(i) \exp{\Big(-jk \cdot (i -
|
||||
i_s(n))\frac{2\pi}{K}\Big)}\]</div>
|
||||
i_s(n))\frac{2\pi}{K}\Big)}.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id4">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="harmonic-ratio">
|
||||
<h2>Harmonic Ratio<a class="headerlink" href="#harmonic-ratio" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The harmonic ratio can be used to differentiate between noisy and periodic
|
||||
signals. higher values suggest that the signal is more periodic (such as a sine
|
||||
signals. Higher values suggest that the signal is more periodic (such as a sine
|
||||
wave) and lower values represent less periodicity. This can be used as a form
|
||||
of confidence measure in determining the validity of F0 values. it is
|
||||
of confidence measure in determining the validity of F0 values. It is
|
||||
calculated as part of the F0 estimation algorithm as:</p>
|
||||
<div class="math">
|
||||
\[HR(n) = max_{T_{min} \leq m \leq T_{max}}{\{T_n(m)\}}\]</div>
|
||||
\[HR(n) = max_{T_{min} \leq m \leq T_{max}}{\{T_n(m)\}}.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id5">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="kurtosis">
|
||||
@@ -350,23 +350,24 @@ calculated as part of the F0 estimation algorithm as:</p>
|
||||
values indicate a flatter distribution and positive values indicate a more
|
||||
“peaky” distribution. Kurtosis is calculated as:</p>
|
||||
<div class="math">
|
||||
\[TK(n)=\frac{1}{\sigma_x^4(n) \cdot K}\sum_{i=i_s(n)}^{i_e(n)}\Big(x(i)-\mu_x(n)\Big)^4-3\]</div>
|
||||
\[TK(n)=\frac{1}{\sigma_x^4(n) \cdot K}\sum_{i=i_s(n)}^{i_e(n)}\Big(x(i)-\mu_x(n)\Big)^4-3.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id6">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="peak-amplitude">
|
||||
<h2>Peak Amplitude<a class="headerlink" href="#peak-amplitude" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Peak amplitude measures the highest peak in the absoulte signal. it is
|
||||
<p>Peak amplitude measures the highest peak in the absolute signal. It is
|
||||
calculated as:</p>
|
||||
<div class="math">
|
||||
\[P(n) = \max_{i_s(n) \leq i \leq i_e(n)}\{\left|x(i)\right|\}\]</div>
|
||||
\[P(n) = \max_{i_s(n) \leq i \leq i_e(n)}\{\left|x(i)\right|\}.\]</div>
|
||||
</div>
|
||||
<div class="section" id="rms">
|
||||
<h2>RMS<a class="headerlink" href="#rms" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The perceived loudness of a signal is an important feature as it can be related
|
||||
to the dynamics of the signal. RMS is used as a measure of sound intensity and
|
||||
is used for distinguishing between loud and quiet audio. It is calculated as:</p>
|
||||
is used for distinguishing between loud and quiet audio. It is calculated as,
|
||||
where $K$ is the total number of samples:</p>
|
||||
<div class="math">
|
||||
\[RMS(n) = \sqrt{\frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)} x(i)^2}\]</div>
|
||||
\[RMS(n) = \sqrt{\frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)} x(i)^2}.\]</div>
|
||||
<p>Other methods that take the human perception of loudness into account may
|
||||
provide more perceptually relevant results. However the RMS measurement
|
||||
produced acceptable results for this application.</p>
|
||||
@@ -374,25 +375,25 @@ produced acceptable results for this application.</p>
|
||||
</div>
|
||||
<div class="section" id="spectral-centroid">
|
||||
<h2>Spectral Centroid<a class="headerlink" href="#spectral-centroid" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The spectral centroid measure the center of gravity accross frequency bins to
|
||||
determine the central point accross the spectral content of the frame. High
|
||||
value sindicate that the spectral content is centered in higher frequencies and
|
||||
lower value indicate a lower center. The spectral centroid is calculated as:</p>
|
||||
<p>The spectral centroid measure the centre of gravity across frequency bins to
|
||||
determine the central point across the spectral content of the frame. High
|
||||
values indicate that the spectral content is centred in higher frequencies and
|
||||
lower value indicate a lower centre. The spectral centroid is calculated as:</p>
|
||||
<div class="math">
|
||||
\[SC(n) = \frac{\sum_{k=0}^{K/2-1} k \cdot | X(k,n) | ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}\]</div>
|
||||
\[SC(n) = \frac{\sum_{k=0}^{K/2-1} k \cdot | X(k,n) | ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}.\]</div>
|
||||
<p>The result is the sum of magnitudes, weighted by their index, normalized by the
|
||||
unweighted sum.</p>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id8">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="spectral-crest-factor">
|
||||
<h2>Spectral Crest Factor<a class="headerlink" href="#spectral-crest-factor" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The spectral crest factor can be used as a mesure of tonalness of the signal.
|
||||
it is calculated by taking the maximum magnitude and dividing by the sum of
|
||||
<p>The spectral crest factor can be used as a measure of tonalness of the signal.
|
||||
It is calculated by taking the maximum magnitude and dividing by the sum of
|
||||
magnitudes.
|
||||
This differntiates between flat spectrums and sinusoidal spectrums. (low values
|
||||
represnting the former and high values representing the latter.)</p>
|
||||
This differentiates between flat spectrums and sinusoidal spectrums. (low values
|
||||
representing the former and high values representing the latter.)</p>
|
||||
<div class="math">
|
||||
\[SCF = \frac{ \max_{0 \leq k \leq K/2-1} \{| X(k,n) | \}}{\sum_{k=0}^{K/2-1} | X(k,n) | }\]</div>
|
||||
\[SCF = \frac{ \max_{0 \leq k \leq K/2-1} \{| X(k,n) | \}}{\sum_{k=0}^{K/2-1} | X(k,n) | }.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id9">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="spectral-flatness">
|
||||
@@ -403,7 +404,7 @@ indicate a flatter spectrum (suggesting a noisy signal) as opposed to lower
|
||||
values that represent a more tonal signal. Spectral flatness is calculated as:</p>
|
||||
<div class="math">
|
||||
\[TFl(n) = \frac{\sqrt[K/2]{\prod_{k=0}^{K/2-1} | X(k,n) | }}{2/K \cdot
|
||||
\sum_{k=0}^{K/2-1} | X(k,n) | }\]</div>
|
||||
\sum_{k=0}^{K/2-1} | X(k,n) | }.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id10">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="spectral-flux">
|
||||
@@ -411,10 +412,10 @@ values that represent a more tonal signal. Spectral flatness is calculated as:</
|
||||
<p>Spectral flux is a measure of change between consecutive frames. It calculates
|
||||
the average difference between frames to differentiate between adjacent frames
|
||||
that are largely dissimilar (suggesting a non-stationary section of signal) and
|
||||
similiar frames (that suggests a steady state signal). It is calculated as:</p>
|
||||
similar frames (that suggests a steady state signal). It is calculated as:</p>
|
||||
<div class="math">
|
||||
\[SF(n) = \frac{\sqrt{\sum_{k=0}^{K/2-1} \Big( | X(k,n) | - | X(k,n-1) | \Big)^2
|
||||
}}{K/2}\]</div>
|
||||
}}{K/2}.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id11">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="spectral-spread">
|
||||
@@ -424,7 +425,7 @@ spectral centroid. This description relates to the spectral shape of the signal
|
||||
and is associated with perceptions of timbre. It is calculated as:</p>
|
||||
<div class="math">
|
||||
\[SS(n) = \sqrt{\frac{\sum_{k=0}^{K/2-1} \Big(k-SC(n)\Big)^2 \cdot | X(k,n)
|
||||
| ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}}\]</div>
|
||||
| ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}}.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id12">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="variance">
|
||||
@@ -432,14 +433,14 @@ and is associated with perceptions of timbre. It is calculated as:</p>
|
||||
<p>The variance of a signal measures it’s spread around the signal’s arithmetic
|
||||
mean. It is used in the calculation of Kurtosis and is calculated as:</p>
|
||||
<div class="math">
|
||||
\[\sigma_x^2 = \frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)}(x(i) - \mu_x(n))^2\]</div>
|
||||
\[\sigma_x^2 = \frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)}(x(i) - \mu_x(n))^2.\]</div>
|
||||
<p>Ref: <a class="reference internal" href="#lerch2012itaca" id="id13">[Ler12]</a></p>
|
||||
</div>
|
||||
<div class="section" id="zero-crossing">
|
||||
<h2>Zero-Crossing<a class="headerlink" href="#zero-crossing" title="Permalink to this headline">¶</a></h2>
|
||||
<p>The zero-crossing rate counts the number of times a signal’s value changes from
|
||||
positive to negative in a frame. it is relevant to determining the noisiness of
|
||||
a signal, as noisy signals will pass from positive to negative more frequenctly
|
||||
positive to negative in a frame. It is relevant to determining the noisiness of
|
||||
a signal, as noisy signals will pass from positive to negative more frequently
|
||||
than period signals. It is calculated as:</p>
|
||||
<div class="math">
|
||||
\[Z(n) = \frac{1}{2K} \sum_{i=i_s(n)}^{i_e(n)} | sgn[x(i)] - sgn[x(i-1)] |\]\[\text{Where the sgn function is defined as:}\]\[\begin{split}sgn[x_i(n)] = \left\{
|
||||
|
||||
+2
-2
@@ -392,13 +392,13 @@
|
||||
</dt>
|
||||
|
||||
|
||||
<dt><a href="api.html#database.Synthesizer.enforce_pitch">enforce_pitch() (database.Synthesizer method)</a>
|
||||
<dt><a href="api.html#database.Synthesizer.enforce_intensity">enforce_intensity() (database.Synthesizer method)</a>
|
||||
</dt>
|
||||
|
||||
</dl></td>
|
||||
<td style="width: 33%" valign="top"><dl>
|
||||
|
||||
<dt><a href="api.html#database.Synthesizer.enforce_rms">enforce_rms() (database.Synthesizer method)</a>
|
||||
<dt><a href="api.html#database.Synthesizer.enforce_pitch">enforce_pitch() (database.Synthesizer method)</a>
|
||||
</dt>
|
||||
|
||||
|
||||
|
||||
@@ -263,7 +263,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> through the currently implemented descriptors.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="c"># Create object logger</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span> <span class="o">+</span> <span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store AnalysedAudioFile object to be analysed.</span>
|
||||
@@ -297,12 +297,12 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># be saved in the HDF5 file</span>
|
||||
<span class="n">data_dict</span><span class="p">,</span> <span class="n">attrs_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hdf5_dataset_formatter</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">create_dataset</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">create_dataset</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">chunks</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">attrs_dict</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Analysis already exists. Reading from: "</span>
|
||||
<span class="s">"{0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
@@ -311,7 +311,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># be saved in the HDF5 file</span>
|
||||
<span class="n">data_dict</span><span class="p">,</span> <span class="n">attrs_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hdf5_dataset_formatter</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">create_dataset</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">create_dataset</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">chunks</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">attrs_dict</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
||||
|
||||
@@ -327,6 +327,12 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">vtimes</span> <span class="o">=</span> <span class="n">times</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">selection</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">((</span><span class="n">vtimes</span> <span class="o">>=</span> <span class="n">start</span><span class="p">)</span> <span class="o">&</span> <span class="p">(</span><span class="n">vtimes</span> <span class="o"><=</span> <span class="n">end</span><span class="p">))</span>
|
||||
<span class="c"># If there are no frames for this grain, take the two closest frames</span>
|
||||
<span class="c"># from the adjacent grains.</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="n">frame_center</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="p">(</span><span class="n">end</span><span class="o">-</span><span class="n">start</span><span class="p">)</span><span class="o">/</span><span class="mf">2.</span>
|
||||
<span class="n">closest_frames</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">vtimes</span><span class="o">-</span><span class="n">frame_center</span><span class="p">)</span><span class="o">.</span><span class="n">argsort</span><span class="p">()[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="n">selection</span><span class="p">[</span><span class="n">closest_frames</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
|
||||
|
||||
<span class="c">#start_ind = np.min(selection)</span>
|
||||
<span class="c">#end_ind = np.argmax(selection)</span>
|
||||
@@ -354,20 +360,19 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c">################################################################################</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">log2_median</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">log2</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">median</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">median</span><span class="p">(</span><span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log2</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">x</span><span class="o">/</span><span class="mi">1000</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">log2_mean</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">log2</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="mi">1000</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log2</span><span class="p">(</span><span class="mi">1</span><span class="o">+</span><span class="n">x</span><span class="o">/</span><span class="mi">1000</span><span class="p">))</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">formatter_func</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">selection</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">valid_inds</span><span class="p">,</span> <span class="n">formatter</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="c"># get all valid frames from current grain</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">[</span><span class="n">selection</span> <span class="o">&</span> <span class="n">valid_inds</span><span class="p">]</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">formatter</span><span class="p">(</span><span class="n">frames</span><span class="p">)</span>
|
||||
<span class="c">#if less than half the frames are valid then the grain is not valid.</span>
|
||||
<span class="k">if</span> <span class="n">frames</span><span class="o">.</span><span class="n">size</span> <span class="o"><</span> <span class="n">valid_inds</span><span class="p">[</span><span class="n">selection</span><span class="p">]</span><span class="o">.</span><span class="n">nonzero</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">size</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">formatter</span><span class="p">(</span><span class="n">frames</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">analysis_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">selection</span><span class="p">,</span> <span class="n">format</span><span class="p">):</span>
|
||||
<span class="sd">"""Calculate the average analysis value of the grain using the match format specified."""</span>
|
||||
@@ -381,6 +386,9 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="p">}</span>
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">selection</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="c"># TODO: Add warning here</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="c"># For debugging apply_along_axis:</span>
|
||||
<span class="c">#for ind, i in enumerate(selection):</span>
|
||||
<span class="c"># output[ind] = self.formatter_func(i, frames, valid_inds, formatter=format_style_dict[format])</span>
|
||||
|
||||
@@ -270,14 +270,13 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">CentroidAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'Centroid'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">CentroidAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'Centroid'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Centroid analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">)</span>
|
||||
|
||||
@@ -289,6 +288,9 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> Calculate the Centroid values of windowed segments of the audio file and</span>
|
||||
<span class="sd"> save to disk.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
|
||||
<span class="c"># Calculate the period of the window in hz</span>
|
||||
<span class="c"># lowest_freq = 1.0 / window_size</span>
|
||||
<span class="c"># Filter frequencies lower than the period of the window</span>
|
||||
@@ -336,6 +338,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">centroidframes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -243,6 +243,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="kn">from</span> <span class="nn">Analysis</span> <span class="kn">import</span> <span class="n">Analysis</span>
|
||||
<span class="kn">from</span> <span class="nn">scipy</span> <span class="kn">import</span> <span class="n">signal</span>
|
||||
<span class="kn">from</span> <span class="nn">numpy.fft</span> <span class="kn">import</span> <span class="n">fft</span><span class="p">,</span> <span class="n">ifft</span><span class="p">,</span> <span class="n">fftshift</span>
|
||||
<span class="kn">from</span> <span class="nn">sppysound</span> <span class="kn">import</span> <span class="n">multirate</span>
|
||||
<span class="kn">import</span> <span class="nn">warnings</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">polyfit</span><span class="p">,</span> <span class="n">arange</span>
|
||||
@@ -265,19 +266,33 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">F0Analysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'F0'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">F0Analysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'F0'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">nyquist_rate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span> <span class="o">/</span> <span class="mf">2.</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">config</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window_size</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">f0</span><span class="p">[</span><span class="s">"window_size"</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">overlap</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="n">config</span><span class="o">.</span><span class="n">f0</span><span class="p">[</span><span class="s">"overlap"</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threshold</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">f0</span><span class="p">[</span><span class="s">"ratio_threshold"</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window_size</span><span class="o">=</span><span class="mi">512</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">overlap</span> <span class="o">=</span> <span class="mf">0.5</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threshold</span> <span class="o">=</span> <span class="mf">0.</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating F0 analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span>
|
||||
<span class="n">frames</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span><span class="p">,</span>
|
||||
<span class="n">window_size</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">window_size</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">overlap</span><span class="p">,</span>
|
||||
<span class="n">threshold</span><span class="o">=</span><span class="n">config</span><span class="o">.</span><span class="n">f0</span><span class="p">[</span><span class="s">"ratio_threshold"</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_analysis_grains</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
@@ -291,8 +306,15 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">start</span> <span class="o">=</span> <span class="n">start</span> <span class="o">/</span> <span class="mi">1000</span>
|
||||
<span class="n">end</span> <span class="o">=</span> <span class="n">end</span> <span class="o">/</span> <span class="mi">1000</span>
|
||||
<span class="n">vtimes</span> <span class="o">=</span> <span class="n">times</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">nan_inds</span> <span class="o">=</span> <span class="n">hr</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">threshold</span>
|
||||
<span class="n">hr</span><span class="p">[</span><span class="n">nan_inds</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="n">frames</span><span class="p">[</span><span class="n">nan_inds</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
|
||||
<span class="n">selection</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">((</span><span class="n">vtimes</span> <span class="o">>=</span> <span class="n">start</span><span class="p">)</span> <span class="o">&</span> <span class="p">(</span><span class="n">vtimes</span> <span class="o"><=</span> <span class="n">end</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="n">frame_center</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="p">(</span><span class="n">end</span><span class="o">-</span><span class="n">start</span><span class="p">)</span><span class="o">/</span><span class="mf">2.</span>
|
||||
<span class="n">closest_frames</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">vtimes</span><span class="o">-</span><span class="n">frame_center</span><span class="p">)</span><span class="o">.</span><span class="n">argsort</span><span class="p">()[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="n">selection</span><span class="p">[</span><span class="n">closest_frames</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
|
||||
|
||||
<span class="k">return</span> <span class="p">((</span><span class="n">frames</span><span class="p">,</span> <span class="n">times</span><span class="p">,</span> <span class="n">hr</span><span class="p">),</span> <span class="n">selection</span><span class="p">)</span>
|
||||
|
||||
@@ -302,6 +324,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">samplerate</span><span class="p">,</span>
|
||||
<span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
|
||||
<span class="n">threshold</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span>
|
||||
<span class="n">m0</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
|
||||
<span class="n">M</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
@@ -311,8 +334,11 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> Calculate the frequency and harmonic ratio values of windowed segments</span>
|
||||
<span class="sd"> of the audio file and save to disk.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">M</span><span class="p">:</span>
|
||||
<span class="n">M</span><span class="o">=</span><span class="nb">round</span><span class="p">(</span><span class="mf">0.016</span><span class="o">*</span><span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="n">M</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="mf">0.016</span><span class="o">*</span><span class="n">samplerate</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="n">hopSize</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">window_size</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">overlapFac</span> <span class="o">*</span> <span class="n">window_size</span><span class="p">))</span>
|
||||
|
||||
@@ -338,21 +364,6 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">Z</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">window</span><span class="o">.</span><span class="n">size</span><span class="p">))</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">window</span><span class="p">)</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">window2</span><span class="p">)))</span>
|
||||
<span class="k">return</span> <span class="n">Z</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">autocorr</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> FFT based autocorrelation function, which is faster than numpy.correlate</span>
|
||||
<span class="sd"> Operates on muti-dimensional arrays on a per element basis.</span>
|
||||
|
||||
<span class="sd"> Ref: http://stackoverflow.com/questions/4503325/autocorrelation-of-a-multidimensional-array-in-numpy</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">length</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="c"># x is supposed to be an array of sequences, of shape (totalelements, length)</span>
|
||||
<span class="n">fftx</span> <span class="o">=</span> <span class="n">fft</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="p">(</span><span class="n">length</span><span class="o">*</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">ret</span> <span class="o">=</span> <span class="n">ifft</span><span class="p">(</span><span class="n">fftx</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">conjugate</span><span class="p">(</span><span class="n">fftx</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">real</span>
|
||||
<span class="n">ret</span> <span class="o">=</span> <span class="n">fftshift</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="n">axes</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ret</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">parabolic</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Quadratic interpolation for estimating the true position of an</span>
|
||||
@@ -390,7 +401,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="k">return</span> <span class="n">f0</span><span class="p">,</span> <span class="n">HR</span>
|
||||
|
||||
<span class="n">R</span><span class="o">=</span><span class="n">autocorr</span><span class="p">([</span><span class="n">frames</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c">#R=autocorr([frames])[0]</span>
|
||||
<span class="n">R</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">correlate</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s">'full'</span><span class="p">)</span>
|
||||
<span class="n">g</span><span class="o">=</span><span class="n">R</span><span class="p">[</span><span class="n">frames</span><span class="o">.</span><span class="n">size</span><span class="p">]</span>
|
||||
|
||||
<span class="n">R</span><span class="o">=</span><span class="n">R</span><span class="p">[</span><span class="n">frames</span><span class="o">.</span><span class="n">size</span><span class="o">-</span><span class="mi">1</span><span class="p">:]</span>
|
||||
@@ -412,25 +424,20 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">except</span> <span class="ne">Warning</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="n">Z</span> <span class="o">=</span> <span class="n">feature_zcr</span><span class="p">(</span><span class="n">Gamma</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">Z</span> <span class="o">></span> <span class="mf">0.15</span><span class="p">:</span>
|
||||
<span class="c"># compute T0 and harmonic ratio:</span>
|
||||
<span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">Gamma</span><span class="p">)</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="n">HR</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c"># compute T0 and harmonic ratio:</span>
|
||||
<span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">Gamma</span><span class="p">)</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="n">HR</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="n">blag</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">Gamma</span><span class="p">)</span>
|
||||
<span class="n">HR</span> <span class="o">=</span> <span class="n">Gamma</span><span class="p">[</span><span class="n">blag</span><span class="p">]</span>
|
||||
<span class="n">interp</span><span class="p">,</span> <span class="n">HR</span> <span class="o">=</span> <span class="n">parabolic</span><span class="p">(</span><span class="n">Gamma</span><span class="p">,</span> <span class="n">blag</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">interp</span><span class="p">:</span>
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="n">HR</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">blag</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">Gamma</span><span class="p">)</span>
|
||||
<span class="n">HR</span> <span class="o">=</span> <span class="n">Gamma</span><span class="p">[</span><span class="n">blag</span><span class="p">]</span>
|
||||
<span class="n">interp</span><span class="p">,</span> <span class="n">HR</span> <span class="o">=</span> <span class="n">parabolic</span><span class="p">(</span><span class="n">Gamma</span><span class="p">,</span> <span class="n">blag</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">interp</span><span class="p">:</span>
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="n">HR</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c"># get fundamental frequency:</span>
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">samplerate</span> <span class="o">/</span> <span class="n">interp</span>
|
||||
<span class="c"># get fundamental frequency:</span>
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">samplerate</span> <span class="o">/</span> <span class="n">interp</span>
|
||||
<span class="k">if</span> <span class="n">f0</span> <span class="o">></span> <span class="n">samplerate</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"F0 value ({0}) is above the nyquist rate "</span>
|
||||
<span class="s">"({1}). This shouldn't happen..."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">f0</span><span class="p">,</span>
|
||||
@@ -451,10 +458,13 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> Formats the output from the analysis method to save to the HDF5 file.</span>
|
||||
<span class="sd"> '''</span>
|
||||
<span class="n">samplerate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_f0_analysis</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># frames = multirate.interp(frames, 4)</span>
|
||||
<span class="n">samplerate</span> <span class="o">*=</span> <span class="mi">1</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_f0_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="n">f0</span> <span class="o">=</span> <span class="n">data</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">harmonic_ratio</span> <span class="o">=</span> <span class="n">data</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">f0_times</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_f0_frame_times</span><span class="p">(</span><span class="n">f0</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="n">f0_times</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_f0_frame_times</span><span class="p">(</span><span class="n">f0</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">({</span><span class="s">'frames'</span><span class="p">:</span> <span class="n">f0</span><span class="p">,</span> <span class="s">'harmonic_ratio'</span><span class="p">:</span> <span class="n">harmonic_ratio</span><span class="p">,</span> <span class="s">'times'</span><span class="p">:</span> <span class="n">f0_times</span><span class="p">},</span> <span class="p">{})</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
@@ -462,6 +472,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">f0frames</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
@@ -486,18 +498,24 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="s">'log2_median'</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">log2_median</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="c"># For debugging apply along axis:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="c"># TODO: Add warning here</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
|
||||
<span class="c">#for ind, i in enumerate(selection):</span>
|
||||
<span class="c"># output[ind] = self.formatter_func(i, frames, valid_inds, harm_ratio, formatter=format_style_dict[format])</span>
|
||||
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">apply_along_axis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">formatter_func</span><span class="p">,</span>
|
||||
<span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">selection</span><span class="p">,</span>
|
||||
<span class="n">frames</span><span class="p">,</span>
|
||||
<span class="n">valid_inds</span><span class="p">,</span>
|
||||
<span class="n">formatter</span><span class="o">=</span><span class="n">format_style_dict</span><span class="p">[</span><span class="n">format</span><span class="p">]</span>
|
||||
<span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">nyquist_rate</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">apply_along_axis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">formatter_func</span><span class="p">,</span>
|
||||
<span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">selection</span><span class="p">,</span>
|
||||
<span class="n">frames</span><span class="p">,</span>
|
||||
<span class="n">valid_inds</span><span class="p">,</span>
|
||||
<span class="n">formatter</span><span class="o">=</span><span class="n">format_style_dict</span><span class="p">[</span><span class="n">format</span><span class="p">]</span>
|
||||
<span class="p">)</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">nyquist_rate</span>
|
||||
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||
<span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">output</span>
|
||||
|
||||
|
||||
@@ -260,12 +260,17 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> this object.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">F0HarmRatioAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'F0HarmRatio'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">F0HarmRatioAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'F0HarmRatio'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">config</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threshold</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">f0</span><span class="p">[</span><span class="s">"ratio_threshold"</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">threshold</span> <span class="o">=</span> <span class="mf">0.</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Initialising F0HarmRatio analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
|
||||
@@ -281,7 +286,14 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">end</span> <span class="o">=</span> <span class="n">end</span> <span class="o">/</span> <span class="mi">1000</span>
|
||||
<span class="n">vtimes</span> <span class="o">=</span> <span class="n">times</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">nan_inds</span> <span class="o">=</span> <span class="n">hr</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">threshold</span>
|
||||
<span class="n">hr</span><span class="p">[</span><span class="n">nan_inds</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
|
||||
<span class="n">selection</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">((</span><span class="n">vtimes</span> <span class="o">>=</span> <span class="n">start</span><span class="p">)</span> <span class="o">&</span> <span class="p">(</span><span class="n">vtimes</span> <span class="o"><=</span> <span class="n">end</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="n">frame_center</span> <span class="o">=</span> <span class="n">start</span> <span class="o">+</span> <span class="p">(</span><span class="n">end</span><span class="o">-</span><span class="n">start</span><span class="p">)</span><span class="o">/</span><span class="mf">2.</span>
|
||||
<span class="n">closest_frames</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">vtimes</span><span class="o">-</span><span class="n">frame_center</span><span class="p">)</span><span class="o">.</span><span class="n">argsort</span><span class="p">()[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="n">selection</span><span class="p">[</span><span class="n">closest_frames</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
|
||||
|
||||
<span class="k">return</span> <span class="p">((</span><span class="n">hr</span><span class="p">,</span> <span class="n">times</span><span class="p">),</span> <span class="n">selection</span><span class="p">)</span>
|
||||
|
||||
@@ -289,7 +301,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">def</span> <span class="nf">calc_F0HarmRatio_frame_times</span><span class="p">(</span><span class="n">F0HarmRatioframes</span><span class="p">,</span> <span class="n">sample_frames</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">):</span>
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
<span class="n">samplerate</span> <span class="o">*=</span> <span class="mi">1</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">F0HarmRatioframes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
@@ -318,6 +333,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c">#for ind, i in enumerate(selection):</span>
|
||||
<span class="c"># output[ind] = self.formatter_func(i, frames, valid_inds, harm_ratio, formatter=format_style_dict[format])</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">selection</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="c"># TODO: Add warning here</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
|
||||
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">apply_along_axis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">formatter_func</span><span class="p">,</span>
|
||||
<span class="mi">1</span><span class="p">,</span>
|
||||
|
||||
@@ -269,8 +269,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">FFTAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'FFT'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">FFTAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'FFT'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
@@ -281,21 +281,22 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">window_size</span> <span class="o">=</span> <span class="mi">2048</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating FFT analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">window_size</span><span class="o">=</span><span class="n">window_size</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="n">window_size</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">fft_window_count</span> <span class="o">=</span> <span class="bp">None</span>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="FFTAnalysis.create_fft_analysis"><a class="viewcode-back" href="../../api.html#analysis.FFTAnalysis.create_fft_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_fft_analysis</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span> <span class="n">window_overlap</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||||
<div class="viewcode-block" id="FFTAnalysis.create_fft_analysis"><a class="viewcode-back" href="../../api.html#analysis.FFTAnalysis.create_fft_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_fft_analysis</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span> <span class="n">window_overlap</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
||||
<span class="n">window_type</span><span class="o">=</span><span class="s">'hanning'</span><span class="p">):</span>
|
||||
<span class="sd">"""Create a spectral analysis for overlapping frames of audio."""</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="c"># Calculate the period of the window in hz</span>
|
||||
<span class="n">lowest_freq</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">/</span> <span class="n">window_size</span>
|
||||
<span class="c"># Filter frequencies lower than the period of the window</span>
|
||||
<span class="c"># filter = ButterFilter()</span>
|
||||
<span class="c"># filter.design_butter(lowest_freq, self.AnalysedAudioFile.samplerate)</span>
|
||||
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="c"># frames = filter.filter_butter(frames)</span>
|
||||
<span class="n">stft</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stft</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">window_size</span><span class="p">,</span> <span class="n">overlapFac</span><span class="o">=</span><span class="mi">1</span><span class="o">/</span><span class="n">window_overlap</span><span class="p">)</span>
|
||||
<span class="n">frame_times</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">calc_fft_frame_times</span><span class="p">(</span>
|
||||
@@ -455,6 +456,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<div class="viewcode-block" id="FFTAnalysis.calc_fft_frame_times"><a class="viewcode-back" href="../../api.html#analysis.FFTAnalysis.calc_fft_frame_times">[docs]</a> <span class="k">def</span> <span class="nf">calc_fft_frame_times</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fftframes</span><span class="p">,</span> <span class="n">sample_frames</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">):</span>
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span><span class="p">,</span> <span class="n">freqbins</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">shape</span><span class="p">(</span><span class="n">fftframes</span><span class="p">)</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -266,8 +266,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">KurtosisAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'kurtosis'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">KurtosisAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'kurtosis'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
@@ -283,17 +283,23 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="s">"analysis."</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating kurtosis analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">variance</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span> <span class="bp">self</span><span class="o">.</span><span class="n">window_size</span><span class="p">,</span> <span class="n">overlapFac</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">overlap</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">create_kurtosis_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">variance</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">create_kurtosis_analysis</span><span class="p">(</span>
|
||||
<span class="n">frames</span><span class="p">,</span>
|
||||
<span class="n">variance</span><span class="p">,</span>
|
||||
<span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
|
||||
<span class="n">window</span><span class="o">=</span><span class="n">signal</span><span class="o">.</span><span class="n">hanning</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Calculate the Kurtosis values of windowed segments of the audio file and</span>
|
||||
<span class="sd"> save to disk.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="c"># Calculate the period of the window in hz</span>
|
||||
<span class="c"># lowest_freq = 1.0 / window_size</span>
|
||||
<span class="c"># Filter frequencies lower than the period of the window</span>
|
||||
@@ -318,6 +324,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">strides</span><span class="o">=</span><span class="p">(</span><span class="n">samples</span><span class="o">.</span><span class="n">strides</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">hopSize</span><span class="p">,</span> <span class="n">samples</span><span class="o">.</span><span class="n">strides</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">window</span><span class="p">:</span>
|
||||
<span class="n">win</span> <span class="o">=</span> <span class="n">window</span><span class="p">(</span><span class="n">window_size</span><span class="p">)</span>
|
||||
<span class="n">frames</span> <span class="o">*=</span> <span class="n">win</span>
|
||||
|
||||
<span class="n">frame_mean</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">variance_sqrd</span> <span class="o">=</span> <span class="n">variance</span><span class="o">**</span><span class="mi">2</span>
|
||||
@@ -342,6 +352,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">kurtosisframes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -267,14 +267,13 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PeakAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'Peak'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">PeakAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'Peak'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Peak analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">)</span>
|
||||
|
||||
@@ -286,6 +285,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> Calculate the Peak values of windowed segments of the audio file and</span>
|
||||
<span class="sd"> save to disk.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="c"># Calculate the period of the window in hz</span>
|
||||
<span class="c"># lowest_freq = 1.0 / window_size</span>
|
||||
<span class="c"># Filter frequencies lower than the period of the window</span>
|
||||
@@ -329,6 +330,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">peakframes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -269,14 +269,13 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">RMSAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'RMS'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">RMSAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'RMS'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">config</span><span class="p">:</span>
|
||||
<span class="c"># TODO: create case for when config isn't present.</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">window_size</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">rms</span><span class="p">[</span><span class="s">"window_size"</span><span class="p">]</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span> <span class="o">/</span> <span class="mi">1000</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">overlap</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="n">config</span><span class="o">.</span><span class="n">rms</span><span class="p">[</span><span class="s">"overlap"</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
@@ -284,20 +283,25 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">overlap</span> <span class="o">=</span> <span class="mf">0.5</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating RMS analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">window_size</span><span class="p">,</span> <span class="n">overlapFac</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">overlap</span><span class="p">,</span> <span class="p">)</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">create_rms_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span><span class="n">samplerate</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
|
||||
<span class="n">window</span><span class="o">=</span><span class="n">signal</span><span class="o">.</span><span class="n">triang</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">create_rms_analysis</span><span class="p">(</span>
|
||||
<span class="n">frames</span><span class="p">,</span>
|
||||
<span class="n">samplerate</span><span class="p">,</span>
|
||||
<span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
|
||||
<span class="n">window</span><span class="o">=</span><span class="n">signal</span><span class="o">.</span><span class="n">hanning</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Generate RMS contour analysis.</span>
|
||||
|
||||
<span class="sd"> Calculate the RMS values of windowed segments of the audio file and</span>
|
||||
<span class="sd"> save to disk.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="k">def</span> <span class="nf">butter_lowpass</span><span class="p">(</span><span class="n">cutoff</span><span class="p">,</span> <span class="n">fs</span><span class="p">,</span> <span class="n">order</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
|
||||
<span class="c"># red: taken from http://stackoverflow.com/questions/25191620/creating-lowpass-filter-in-scipy-understanding-methods-and-units</span>
|
||||
<span class="n">nyq</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">fs</span>
|
||||
@@ -317,7 +321,6 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
|
||||
<span class="c"># Generate a window function to apply to rms windows before analysis</span>
|
||||
<span class="n">win</span> <span class="o">=</span> <span class="n">window</span><span class="p">(</span><span class="n">window_size</span><span class="p">)</span>
|
||||
<span class="n">hopSize</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">window_size</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">overlapFac</span> <span class="o">*</span> <span class="n">window_size</span><span class="p">))</span>
|
||||
|
||||
<span class="c"># zeros at beginning (thus center of 1st window should be for sample nr. 0)</span>
|
||||
@@ -334,8 +337,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">strides</span><span class="o">=</span><span class="p">(</span><span class="n">samples</span><span class="o">.</span><span class="n">strides</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">hopSize</span><span class="p">,</span> <span class="n">samples</span><span class="o">.</span><span class="n">strides</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
|
||||
<span class="n">frames</span> <span class="o">*=</span> <span class="n">win</span>
|
||||
<span class="n">rms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">square</span><span class="p">(</span><span class="n">frames</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">window</span><span class="p">:</span>
|
||||
<span class="n">win</span> <span class="o">=</span> <span class="n">window</span><span class="p">(</span><span class="n">window_size</span><span class="p">)</span>
|
||||
<span class="n">frames</span> <span class="o">*=</span> <span class="n">win</span>
|
||||
<span class="n">rms</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">square</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">frames</span><span class="p">)),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">rms</span>
|
||||
|
||||
@@ -354,6 +359,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">rmsframes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -258,8 +258,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralCentroidAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcCntr'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralCentroidAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcCntr'</span><span class="p">)</span>
|
||||
<span class="c"># Create logger for module</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
@@ -275,8 +275,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Spectral Centroid analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_spccntr_analysis</span><span class="p">,</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s">'win_size'</span><span class="p">],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">],</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">spccntr_window_count</span> <span class="o">=</span> <span class="bp">None</span>
|
||||
@@ -291,15 +290,15 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">return</span> <span class="p">({</span><span class="s">'frames'</span><span class="p">:</span> <span class="n">output</span><span class="p">,</span> <span class="s">'times'</span><span class="p">:</span> <span class="n">times</span><span class="p">},</span> <span class="p">{})</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<div class="viewcode-block" id="SpectralCentroidAnalysis.create_spccntr_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralCentroidAnalysis.create_spccntr_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spccntr_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="s">"freq"</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SpectralCentroidAnalysis.create_spccntr_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralCentroidAnalysis.create_spccntr_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spccntr_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="s">"ind"</span><span class="p">):</span>
|
||||
<span class="sd">'''</span>
|
||||
<span class="sd"> Calculate the spectral centroid of the fft frames.</span>
|
||||
|
||||
<span class="sd"> length: the length of the window used to calculate the FFT.</span>
|
||||
<span class="sd"> samplerate: the samplerate of the audio analysed.</span>
|
||||
<span class="sd"> output_format = Choose either "freq" for output in Hz or "ind" for bin</span>
|
||||
<span class="sd"> index output</span>
|
||||
<span class="sd"> '''</span>
|
||||
<span class="n">fft</span> <span class="o">=</span> <span class="n">fft</span><span class="p">[:]</span>
|
||||
<span class="c"># Get the positive magnitudes of each bin.</span>
|
||||
<span class="n">magnitudes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">fft</span><span class="p">)</span>
|
||||
<span class="c"># Get the highest magnitude.</span>
|
||||
@@ -310,16 +309,15 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">return</span> <span class="n">y</span>
|
||||
<span class="c"># Calculate the centre frequency of each rfft bin.</span>
|
||||
<span class="k">if</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s">"freq"</span><span class="p">:</span>
|
||||
<span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">rfftfreq</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">1.0</span><span class="o">/</span><span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">rfftfreq</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mf">1.0</span><span class="o">/</span><span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s">"ind"</span><span class="p">:</span>
|
||||
<span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"</span><span class="se">\'</span><span class="s">{0}</span><span class="se">\'</span><span class="s"> is not a valid output "</span>
|
||||
<span class="s">"format."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">output_format</span><span class="p">))</span>
|
||||
<span class="c"># Calculate the weighted mean</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">magnitudes</span><span class="o">*</span><span class="n">freqs</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">magnitudes</span><span class="o">*</span><span class="n">freqs</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||||
|
||||
<span class="c"># Convert from index to Hz</span>
|
||||
<span class="k">return</span> <span class="n">y</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
|
||||
@@ -259,8 +259,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralCrestFactorAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcCrestFactor'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralCrestFactorAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcCrestFactor'</span><span class="p">)</span>
|
||||
<span class="c"># Create logger for module</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
@@ -276,9 +276,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Spectral CrestFactor analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_spccf_analysis</span><span class="p">,</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s">'win_size'</span><span class="p">],</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">spccf_window_count</span> <span class="o">=</span> <span class="bp">None</span>
|
||||
|
||||
@@ -292,19 +290,15 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">return</span> <span class="p">({</span><span class="s">'frames'</span><span class="p">:</span> <span class="n">output</span><span class="p">,</span> <span class="s">'times'</span><span class="p">:</span> <span class="n">times</span><span class="p">},</span> <span class="p">{})</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<div class="viewcode-block" id="SpectralCrestFactorAnalysis.create_spccf_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralCrestFactorAnalysis.create_spccf_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spccf_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="s">"freq"</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SpectralCrestFactorAnalysis.create_spccf_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralCrestFactorAnalysis.create_spccf_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spccf_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">):</span>
|
||||
<span class="sd">'''</span>
|
||||
<span class="sd"> Calculate the spectral crest factor of the fft frames.</span>
|
||||
|
||||
<span class="sd"> length: the length of the window used to calculate the FFT.</span>
|
||||
<span class="sd"> samplerate: the samplerate of the audio analysed.</span>
|
||||
<span class="sd"> output_format = Choose either "freq" for output in Hz or "ind" for bin</span>
|
||||
<span class="sd"> index output</span>
|
||||
<span class="sd"> '''</span>
|
||||
<span class="n">fft</span> <span class="o">=</span> <span class="n">fft</span><span class="p">[:]</span>
|
||||
<span class="c"># Get the positive magnitudes of each bin.</span>
|
||||
<span class="n">magnitudes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">fft</span><span class="p">)</span>
|
||||
<span class="c"># Get highest magnitude</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">magnitudes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">y</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">y</span>
|
||||
@@ -315,7 +309,6 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s">'ignore'</span><span class="p">)</span>
|
||||
<span class="n">spectral_cf</span> <span class="o">=</span> <span class="n">max_bins</span> <span class="o">/</span> <span class="n">mag_sum</span>
|
||||
|
||||
|
||||
<span class="k">return</span> <span class="n">spectral_cf</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
|
||||
@@ -260,8 +260,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralFlatnessAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcFlatness'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralFlatnessAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcFlatness'</span><span class="p">)</span>
|
||||
<span class="c"># Create logger for module</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
@@ -277,9 +277,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Spectral Flatness analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_spcflatness_analysis</span><span class="p">,</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s">'win_size'</span><span class="p">],</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">spcflatness_window_count</span> <span class="o">=</span> <span class="bp">None</span>
|
||||
|
||||
@@ -293,18 +291,14 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">return</span> <span class="p">({</span><span class="s">'frames'</span><span class="p">:</span> <span class="n">output</span><span class="p">,</span> <span class="s">'times'</span><span class="p">:</span> <span class="n">times</span><span class="p">},</span> <span class="p">{})</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<div class="viewcode-block" id="SpectralFlatnessAnalysis.create_spcflatness_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralFlatnessAnalysis.create_spcflatness_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spcflatness_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="s">"freq"</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SpectralFlatnessAnalysis.create_spcflatness_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralFlatnessAnalysis.create_spcflatness_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spcflatness_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">):</span>
|
||||
<span class="sd">'''</span>
|
||||
<span class="sd"> Calculate the spectral flatness of the fft frames.</span>
|
||||
|
||||
<span class="sd"> length: the length of the window used to calculate the FFT.</span>
|
||||
<span class="sd"> samplerate: the samplerate of the audio analysed.</span>
|
||||
<span class="sd"> output_format = Choose either "freq" for output in Hz or "ind" for bin</span>
|
||||
<span class="sd"> index output</span>
|
||||
<span class="sd"> '''</span>
|
||||
<span class="n">fft</span> <span class="o">=</span> <span class="n">fft</span><span class="p">[:]</span>
|
||||
<span class="c"># Get the positive magnitudes of each bin.</span>
|
||||
<span class="n">magnitudes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">fft</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">magnitudes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">y</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">y</span>
|
||||
@@ -313,7 +307,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">with</span> <span class="n">warnings</span><span class="o">.</span><span class="n">catch_warnings</span><span class="p">():</span>
|
||||
<span class="n">warnings</span><span class="o">.</span><span class="n">filterwarnings</span><span class="p">(</span><span class="s">'ignore'</span><span class="p">)</span>
|
||||
<span class="c"># Calculate the geometric mean of magnitudes</span>
|
||||
<span class="n">geo_mean</span> <span class="o">=</span> <span class="n">stats</span><span class="o">.</span><span class="n">gmean</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">geo_mean</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">e</span><span class="o">**</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="c"># Calculate the arithmetic mean of magnitudes</span>
|
||||
<span class="n">arith_mean</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">spectral_flatness</span> <span class="o">=</span> <span class="n">geo_mean</span> <span class="o">/</span> <span class="n">arith_mean</span>
|
||||
|
||||
@@ -258,8 +258,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralFluxAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcFlux'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralFluxAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcFlux'</span><span class="p">)</span>
|
||||
<span class="c"># Create logger for module</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
@@ -275,9 +275,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Spectral Flux analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_spcflux_analysis</span><span class="p">,</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s">'win_size'</span><span class="p">],</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">spcflux_window_count</span> <span class="o">=</span> <span class="bp">None</span>
|
||||
|
||||
@@ -291,19 +289,18 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">return</span> <span class="p">({</span><span class="s">'frames'</span><span class="p">:</span> <span class="n">output</span><span class="p">,</span> <span class="s">'times'</span><span class="p">:</span> <span class="n">times</span><span class="p">},</span> <span class="p">{})</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<div class="viewcode-block" id="SpectralFluxAnalysis.create_spcflux_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralFluxAnalysis.create_spcflux_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spcflux_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="s">"freq"</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SpectralFluxAnalysis.create_spcflux_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralFluxAnalysis.create_spcflux_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spcflux_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">):</span>
|
||||
<span class="sd">'''</span>
|
||||
<span class="sd"> Calculate the spectral flux of the fft frames.</span>
|
||||
|
||||
<span class="sd"> length: the length of the window used to calculate the FFT.</span>
|
||||
<span class="sd"> samplerate: the samplerate of the audio analysed.</span>
|
||||
<span class="sd"> output_format = Choose either "freq" for output in Hz or "ind" for bin</span>
|
||||
<span class="sd"> index output</span>
|
||||
<span class="sd"> '''</span>
|
||||
<span class="n">fft</span> <span class="o">=</span> <span class="n">fft</span><span class="p">[:]</span>
|
||||
<span class="c"># Get the positive magnitudes of each bin.</span>
|
||||
<span class="n">magnitudes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">fft</span><span class="p">)</span>
|
||||
<span class="c"># Get highest magnitude</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">any</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">nonzero</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">magnitudes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">y</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">y</span>
|
||||
@@ -312,7 +309,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># magnitude.</span>
|
||||
<span class="n">rolled_mags</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
<span class="n">sum_of_squares</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">((</span><span class="n">magnitudes</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">-</span><span class="n">rolled_mags</span><span class="p">)</span><span class="o">**</span><span class="mf">2.</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">spectral_flux</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">sum_of_squares</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">length</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">spectral_flux</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">sum_of_squares</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">spectral_flux</span></div>
|
||||
|
||||
@@ -323,6 +320,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">spcflux_frames</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">timebins</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
<span class="n">scale</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">timebins</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="c"># divide the number of samples by the total number of frames, then</span>
|
||||
|
||||
@@ -258,8 +258,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralSpreadAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcSprd'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">SpectralSpreadAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'SpcSprd'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
@@ -278,9 +278,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating Spectral Spread analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span>
|
||||
<span class="n">spccntr</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">][:],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="o">.</span><span class="n">attrs</span><span class="p">[</span><span class="s">'win_size'</span><span class="p">],</span>
|
||||
<span class="n">fft</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">],</span>
|
||||
<span class="n">spccntr</span><span class="o">.</span><span class="n">analysis</span><span class="p">[</span><span class="s">'frames'</span><span class="p">],</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">samplerate</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">spccntr_window_count</span> <span class="o">=</span> <span class="bp">None</span>
|
||||
@@ -295,7 +294,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">return</span> <span class="p">({</span><span class="s">'frames'</span><span class="p">:</span> <span class="n">output</span><span class="p">,</span> <span class="s">'times'</span><span class="p">:</span> <span class="n">times</span><span class="p">},</span> <span class="p">{})</span></div>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<div class="viewcode-block" id="SpectralSpreadAnalysis.create_spcsprd_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralSpreadAnalysis.create_spcsprd_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spcsprd_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">spectral_centroid</span><span class="p">,</span> <span class="n">length</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span> <span class="o">=</span> <span class="s">"freq"</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="SpectralSpreadAnalysis.create_spcsprd_analysis"><a class="viewcode-back" href="../../api.html#analysis.SpectralSpreadAnalysis.create_spcsprd_analysis">[docs]</a> <span class="k">def</span> <span class="nf">create_spcsprd_analysis</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">spectral_centroid</span><span class="p">,</span> <span class="n">samplerate</span><span class="p">,</span> <span class="n">output_format</span> <span class="o">=</span> <span class="s">"ind"</span><span class="p">):</span>
|
||||
<span class="sd">'''</span>
|
||||
<span class="sd"> Calculate the spectral spread of the fft frames.</span>
|
||||
|
||||
@@ -304,6 +303,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> length: the length of the window used to calculate the FFT.</span>
|
||||
<span class="sd"> samplerate: the samplerate of the audio analysed.</span>
|
||||
<span class="sd"> '''</span>
|
||||
<span class="n">fft</span> <span class="o">=</span> <span class="n">fft</span><span class="p">[:]</span>
|
||||
<span class="n">spectral_centroid</span> <span class="o">=</span> <span class="n">spectral_centroid</span><span class="p">[:]</span>
|
||||
<span class="c"># Get the positive magnitudes of each bin.</span>
|
||||
<span class="n">magnitudes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">fft</span><span class="p">)</span>
|
||||
<span class="n">mag_max</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">)</span>
|
||||
@@ -315,17 +316,17 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">if</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s">"ind"</span><span class="p">:</span>
|
||||
<span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">output_format</span> <span class="o">==</span> <span class="s">"freq"</span><span class="p">:</span>
|
||||
<span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">rfftfreq</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">1.0</span><span class="o">/</span><span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="n">freqs</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">fft</span><span class="o">.</span><span class="n">rfftfreq</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">fft</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mf">1.0</span><span class="o">/</span><span class="n">samplerate</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"</span><span class="se">\'</span><span class="s">{0}</span><span class="se">\'</span><span class="s"> is not a valid output "</span>
|
||||
<span class="s">"format."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">output_format</span><span class="p">))</span>
|
||||
|
||||
<span class="n">spectral_centroid</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">(</span><span class="n">spectral_centroid</span><span class="p">)</span>
|
||||
|
||||
<span class="n">a</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">freqs</span><span class="o">-</span><span class="n">spectral_centroid</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">mag_sqrd</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">magnitudes</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">freqs</span><span class="o">-</span><span class="n">spectral_centroid</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span>
|
||||
<span class="n">mag_sqrd</span> <span class="o">=</span> <span class="n">magnitudes</span><span class="o">**</span><span class="mi">2</span>
|
||||
<span class="c"># Calculate the weighted mean</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">a</span><span class="o">*</span><span class="n">mag_sqrd</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">mag_sqrd</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span><span class="p">))</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">a</span><span class="o">*</span><span class="n">mag_sqrd</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">mag_sqrd</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)))</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">y</span></div>
|
||||
|
||||
|
||||
@@ -268,8 +268,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">VarianceAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'variance'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">VarianceAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'variance'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Store reference to the file to be analysed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span> <span class="o">=</span> <span class="n">AnalysedAudioFile</span>
|
||||
@@ -279,7 +279,6 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">overlap</span> <span class="o">=</span> <span class="mf">1.</span> <span class="o">/</span> <span class="n">config</span><span class="o">.</span><span class="n">variance</span><span class="p">[</span><span class="s">"overlap"</span><span class="p">]</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating variance analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">window_size</span><span class="p">,</span> <span class="n">overlapFac</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">overlap</span><span class="p">)</span>
|
||||
|
||||
@@ -300,6 +299,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># TODO: Fix filter</span>
|
||||
<span class="c"># frames = filter.filter_butter(frames)</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="n">hopSize</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">window_size</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">overlapFac</span> <span class="o">*</span> <span class="n">window_size</span><span class="p">))</span>
|
||||
|
||||
<span class="c"># zeros at beginning (thus center of 1st window should be for sample nr. 0)</span>
|
||||
@@ -335,6 +336,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">varianceframes</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -262,17 +262,24 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> - config: The configuration module used to configure the analysis</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ZeroXAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'ZeroCrossing'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">AnalysedAudioFile</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">(</span><span class="n">ZeroXAnalysis</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">AnalysedAudioFile</span><span class="p">,</span><span class="n">frames</span><span class="p">,</span> <span class="n">analysis_group</span><span class="p">,</span> <span class="s">'ZeroCrossing'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="o">+</span><span class="s">'.{0}Analysis'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_group</span> <span class="o">=</span> <span class="n">analysis_group</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Creating zero crossing analysis for {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">AnalysedAudioFile</span><span class="o">.</span><span class="n">read_grain</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">create_zerox_analysis</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span> <span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">create_zerox_analysis</span><span class="p">(</span>
|
||||
<span class="n">frames</span><span class="p">,</span>
|
||||
<span class="n">window_size</span><span class="o">=</span><span class="mi">512</span><span class="p">,</span>
|
||||
<span class="n">overlapFac</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
|
||||
<span class="o">*</span><span class="n">args</span><span class="p">,</span>
|
||||
<span class="o">**</span><span class="n">kwargs</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""Generate zero crossing value for window of the signal"""</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">frames</span><span class="p">()</span>
|
||||
<span class="n">hopSize</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">window_size</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">overlapFac</span> <span class="o">*</span> <span class="n">window_size</span><span class="p">))</span>
|
||||
|
||||
<span class="c"># zeros at beginning (thus center of 1st window should be for sample nr. 0)</span>
|
||||
@@ -283,13 +290,17 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># zeros at end (thus samples can be fully covered by frames)</span>
|
||||
<span class="n">samples</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">samples</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">window_size</span><span class="p">))</span>
|
||||
|
||||
<span class="c"># TODO: Better handeling of zeros based on previous sign would improve</span>
|
||||
<span class="c"># accuracy.</span>
|
||||
<span class="n">epsilon</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">finfo</span><span class="p">(</span><span class="nb">float</span><span class="p">)</span><span class="o">.</span><span class="n">eps</span>
|
||||
<span class="n">samples</span><span class="p">[</span><span class="n">samples</span> <span class="o">==</span> <span class="mf">0.</span><span class="p">]</span> <span class="o">+=</span> <span class="n">epsilon</span>
|
||||
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="n">stride_tricks</span><span class="o">.</span><span class="n">as_strided</span><span class="p">(</span>
|
||||
<span class="n">samples</span><span class="p">,</span>
|
||||
<span class="n">shape</span><span class="o">=</span><span class="p">(</span><span class="n">cols</span><span class="p">,</span> <span class="n">window_size</span><span class="p">),</span>
|
||||
<span class="n">strides</span><span class="o">=</span><span class="p">(</span><span class="n">samples</span><span class="o">.</span><span class="n">strides</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">hopSize</span><span class="p">,</span> <span class="n">samples</span><span class="o">.</span><span class="n">strides</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
|
||||
<span class="n">zero_crossing</span> <span class="o">=</span> <span class="p">(</span><span class="mf">1.</span><span class="o">/</span><span class="p">(</span><span class="mf">2.</span><span class="o">*</span><span class="n">samples</span><span class="o">.</span><span class="n">size</span><span class="p">))</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diff</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">frames</span><span class="p">))),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">zero_crossing</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">diff</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">frames</span><span class="p">))),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">zero_crossing</span>
|
||||
|
||||
<span class="nd">@staticmethod</span>
|
||||
@@ -297,6 +308,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="sd">"""Calculate times for frames using sample size and samplerate."""</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sample_frames</span><span class="p">,</span> <span class="s">'__call__'</span><span class="p">):</span>
|
||||
<span class="n">sample_frames</span> <span class="o">=</span> <span class="n">sample_frames</span><span class="p">()</span>
|
||||
<span class="c"># Get number of frames for time and frequency</span>
|
||||
<span class="n">timebins</span> <span class="o">=</span> <span class="n">zerox_frames</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="c"># Create array ranging from 0 to number of time frames</span>
|
||||
|
||||
@@ -323,7 +323,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Allow AudioFile object to be opened by 'with' statements"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Opening soundfile {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">"Opening soundfile {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">mode</span> <span class="o">==</span> <span class="s">'r'</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">filepath</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span>
|
||||
@@ -866,9 +866,9 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ms_to_samps</span><span class="p">(</span><span class="n">position</span><span class="p">)</span>
|
||||
<span class="c"># multiply samples by the fade values from the start position for</span>
|
||||
<span class="c"># the duration of the fade</span>
|
||||
<span class="n">audio</span><span class="p">[</span><span class="n">position</span><span class="p">:</span><span class="n">position</span><span class="o">+</span><span class="n">fade</span><span class="o">.</span><span class="n">size</span><span class="p">]</span> <span class="o">*=</span> <span class="n">fade</span>
|
||||
<span class="n">audio</span><span class="p">[</span><span class="o">-</span><span class="n">position</span><span class="p">:</span><span class="n">position</span><span class="o">-</span><span class="n">fade</span><span class="o">.</span><span class="n">size</span><span class="p">]</span> <span class="o">*=</span> <span class="n">fade</span>
|
||||
<span class="c"># zero any samples after the fade in</span>
|
||||
<span class="n">audio</span><span class="p">[</span><span class="n">position</span><span class="o">+</span><span class="n">fade</span><span class="o">.</span><span class="n">size</span><span class="p">:]</span> <span class="o">*=</span> <span class="mi">0</span>
|
||||
<span class="n">audio</span><span class="p">[</span><span class="o">-</span><span class="n">position</span><span class="o">-</span><span class="n">fade</span><span class="o">.</span><span class="n">size</span><span class="p">:]</span> <span class="o">*=</span> <span class="mi">0</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="s">"{0} is not a valid fade option. Use either </span><span class="se">\"</span><span class="s">in</span><span class="se">\"</span><span class="s"> or "</span>
|
||||
<span class="s">"</span><span class="se">\"</span><span class="s">out</span><span class="se">\"</span><span class="s">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
|
||||
@@ -1127,15 +1127,13 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analyses</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
|
||||
<span class="n">frames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read_grain</span>
|
||||
|
||||
<span class="c"># Create the analysis objects for analyses that have been specified in</span>
|
||||
<span class="c"># the analyses member variable.</span>
|
||||
<span class="k">for</span> <span class="n">analysis</span> <span class="ow">in</span> <span class="n">analysis_object_list</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">analysis</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">available_analyses</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analyses</span><span class="p">[</span><span class="n">analysis</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">analysis</span><span class="o">.</span><span class="n">analysis_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">analysis_storage</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analysis_storage</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
|
||||
<span class="n">gc</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">analyses</span><span class="p">[</span><span class="n">analysis</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">analysis</span><span class="o">.</span><span class="n">analysis_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">frames</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">analysis_storage</span><span class="p">,</span> <span class="n">config</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">create_analysis_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">analysis_file</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
+109
-51
@@ -601,11 +601,25 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">length</span> <span class="o">=</span> <span class="n">entry</span><span class="o">.</span><span class="n">samps_to_ms</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">frames</span><span class="p">)</span>
|
||||
<span class="n">hop_size</span> <span class="o">=</span> <span class="n">grain_length</span> <span class="o">/</span> <span class="n">overlap</span>
|
||||
<span class="n">grain_indexes</span><span class="p">[</span><span class="n">ind</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">length</span> <span class="o">/</span> <span class="n">hop_size</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
||||
<span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">cumsum</span><span class="p">(</span><span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">cumsum</span><span class="p">(</span><span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
|
||||
<span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">grain_indexes</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">grain_indexes</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">kdtree_matcher</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grain_size</span><span class="p">,</span> <span class="n">overlap</span><span class="p">):</span>
|
||||
<span class="n">invalid_inds</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">):</span>
|
||||
<span class="n">entry</span><span class="o">.</span><span class="n">generate_grain_times</span><span class="p">(</span><span class="n">grain_size</span><span class="p">,</span> <span class="n">overlap</span><span class="p">,</span> <span class="n">save_times</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">entry</span><span class="o">.</span><span class="n">times</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="n">invalid_inds</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">invalid_inds</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="n">invalid_inds</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">source_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">):</span>
|
||||
<span class="n">entry</span><span class="o">.</span><span class="n">generate_grain_times</span><span class="p">(</span><span class="n">grain_size</span><span class="p">,</span> <span class="n">overlap</span><span class="p">,</span> <span class="n">save_times</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">entry</span><span class="o">.</span><span class="n">times</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="n">invalid_inds</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">invalid_inds</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">source_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="c"># Count grains of the source database</span>
|
||||
<span class="n">source_sample_indexes</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">count_grains</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">source_db</span><span class="p">,</span> <span class="n">grain_size</span><span class="p">,</span> <span class="n">overlap</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
@@ -621,6 +635,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">weightings</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="p">:</span> <span class="mf">1.</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">matcher_analyses</span><span class="p">}</span>
|
||||
|
||||
|
||||
<span class="c"># Create an imputer object for handeling Nan values.</span>
|
||||
<span class="n">imp</span> <span class="o">=</span> <span class="n">Imputer</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">strategy</span><span class="o">=</span><span class="s">'median'</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">tind</span><span class="p">,</span> <span class="n">target_entry</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">):</span>
|
||||
<span class="c"># Check if match data already exists and use it rather than</span>
|
||||
<span class="c"># regenerating if it does.</span>
|
||||
@@ -631,7 +649,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="c"># Create an array of grain times for target sample</span>
|
||||
<span class="n">target_times</span> <span class="o">=</span> <span class="n">target_entry</span><span class="o">.</span><span class="n">generate_grain_times</span><span class="p">(</span><span class="n">grain_size</span><span class="p">,</span> <span class="n">overlap</span><span class="p">,</span> <span class="n">save_times</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="n">target_times</span> <span class="o">=</span> <span class="n">target_entry</span><span class="o">.</span><span class="n">times</span>
|
||||
<span class="n">x_size</span> <span class="o">=</span> <span class="n">target_times</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">match_indexes</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">((</span><span class="n">x_size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_quantity</span><span class="p">))</span>
|
||||
<span class="n">match_vals</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">((</span><span class="n">x_size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_quantity</span><span class="p">))</span>
|
||||
@@ -644,28 +662,41 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">analysis_formatting</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">analysis_dict</span><span class="p">[</span><span class="n">analysis</span><span class="p">]</span>
|
||||
|
||||
<span class="n">target_data</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="n">target_entry</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">target_times</span><span class="p">,</span> <span class="n">analysis</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="n">analysis_formatting</span><span class="p">)</span>
|
||||
<span class="n">target_data</span> <span class="o">*=</span> <span class="n">weightings</span><span class="p">[</span><span class="n">analysis</span><span class="p">]</span>
|
||||
<span class="n">all_target_analyses</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">target_data</span>
|
||||
|
||||
<span class="n">imp</span> <span class="o">=</span> <span class="n">Imputer</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">nan_columns</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">all_target_analyses</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">all_target_analyses</span><span class="p">[:,</span> <span class="n">nan_columns</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.</span>
|
||||
<span class="c"># Impute values for Nans</span>
|
||||
<span class="n">all_target_analyses</span> <span class="o">=</span> <span class="n">imp</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">all_target_analyses</span><span class="p">)</span>
|
||||
<span class="c"># all_target_analyses[np.isnan(all_target_analyses)] = np.inf</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">sind</span><span class="p">,</span> <span class="n">source_entry</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">source_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"K-d Tree Matching: {0} to {1}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">source_entry</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">target_entry</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c"># Create an array of grain times for source sample</span>
|
||||
<span class="n">source_times</span> <span class="o">=</span> <span class="n">source_entry</span><span class="o">.</span><span class="n">generate_grain_times</span><span class="p">(</span><span class="n">grain_size</span><span class="p">,</span> <span class="n">overlap</span><span class="p">,</span> <span class="n">save_times</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
<span class="n">source_times</span> <span class="o">=</span> <span class="n">source_entry</span><span class="o">.</span><span class="n">times</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">source_times</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="n">all_source_analyses</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">matcher_analyses</span><span class="p">),</span> <span class="n">source_times</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
|
||||
|
||||
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">analysis</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">matcher_analyses</span><span class="p">):</span>
|
||||
<span class="n">analysis_formatting</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">analysis_dict</span><span class="p">[</span><span class="n">analysis</span><span class="p">]</span>
|
||||
|
||||
<span class="n">source_data</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="n">source_entry</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">source_times</span><span class="p">,</span> <span class="n">analysis</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="n">analysis_formatting</span><span class="p">)</span>
|
||||
<span class="n">source_data</span> <span class="o">*=</span> <span class="n">weightings</span><span class="p">[</span><span class="n">analysis</span><span class="p">]</span>
|
||||
<span class="n">all_source_analyses</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">source_data</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"K-d Tree Matching: {0} to {1}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">source_entry</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">target_entry</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
|
||||
|
||||
<span class="c"># Impute values for Nans</span>
|
||||
<span class="n">nan_columns</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">all_source_analyses</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">all_source_analyses</span><span class="p">[:,</span> <span class="n">nan_columns</span><span class="p">]</span> <span class="o">=</span> <span class="mf">0.</span>
|
||||
<span class="n">all_source_analyses</span> <span class="o">=</span> <span class="n">imp</span><span class="o">.</span><span class="n">fit_transform</span><span class="p">(</span><span class="n">all_source_analyses</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># all_source_analyses[np.isnan(all_source_analyses)] = np.inf</span>
|
||||
|
||||
<span class="n">source_tree</span> <span class="o">=</span> <span class="n">spatial</span><span class="o">.</span><span class="n">cKDTree</span><span class="p">(</span><span class="n">all_source_analyses</span><span class="o">.</span><span class="n">T</span><span class="p">,</span> <span class="n">leafsize</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
|
||||
<span class="n">results_vals</span><span class="p">,</span> <span class="n">results_inds</span> <span class="o">=</span> <span class="n">source_tree</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">all_target_analyses</span><span class="o">.</span><span class="n">T</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">match_quantity</span><span class="p">,</span> <span class="n">p</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
|
||||
@@ -929,12 +960,22 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="sd"> grain, a dimension for each match of said grain and a dimension</span>
|
||||
<span class="sd"> containing database sample index and the sample's grain index.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="c"># source_sample_indexes = source_sample_indexes[source_sample_indexes[:, 1] != 0.]</span>
|
||||
|
||||
<span class="n">mi_shape</span> <span class="o">=</span> <span class="n">match_indexes</span><span class="o">.</span><span class="n">shape</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">match_indexes</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
|
||||
<span class="c"># Find indexes within the range of each source sample index.</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">logical_and</span><span class="p">(</span>
|
||||
<span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">>=</span><span class="n">source_sample_indexes</span><span class="p">[:,</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o"><=</span><span class="n">source_sample_indexes</span><span class="p">[:,</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"Not all match indexes have a corresponding sample index. This shouldn't happen...</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Check that all database path arguments are correct then try re-running with the --rematch and --reanalyse flags.</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"If this does'nt work, delete the audio and data directories in all databases and try again..."</span><span class="p">)</span>
|
||||
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="n">mi_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">mi_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">x</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argmax</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
|
||||
@@ -964,10 +1005,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">"config"</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms_bool</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"enforce_rms"</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity_bool</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"enforce_intensity"</span><span class="p">]</span>
|
||||
<span class="c"># Key word arguments overwrite config file.</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms_bool</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">"enforce_rms"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms_bool</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms_bool</span> <span class="ow">and</span> <span class="p">(</span><span class="s">"rms"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="o">.</span><span class="n">analysis_list</span> <span class="ow">or</span> <span class="s">"rms"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_db</span><span class="o">.</span><span class="n">analysis_list</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity_bool</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">"enforce_intensity"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity_bool</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity_bool</span> <span class="ow">and</span> <span class="p">(</span><span class="s">"rms"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="o">.</span><span class="n">analysis_list</span> <span class="ow">or</span> <span class="s">"rms"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_db</span><span class="o">.</span><span class="n">analysis_list</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">"BLARGHHH"</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">enforce_f0_bool</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"enforce_f0"</span><span class="p">]</span>
|
||||
@@ -976,7 +1017,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_f0_bool</span> <span class="ow">and</span> <span class="p">(</span><span class="s">"f0"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="o">.</span><span class="n">analysis_list</span> <span class="ow">or</span> <span class="s">"f0"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_db</span><span class="o">.</span><span class="n">analysis_list</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">"F0 enforcement cannot be enabled if both databases do not have F0 analyses."</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"Target database must be provided if rms or F0 enforcement is enabled."</span><span class="p">)</span>
|
||||
|
||||
@@ -1015,8 +1056,8 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">channels</span><span class="o">=</span><span class="n">output_config</span><span class="p">[</span><span class="s">"channels"</span><span class="p">]</span>
|
||||
<span class="p">)</span> <span class="k">as</span> <span class="n">output</span><span class="p">:</span>
|
||||
<span class="n">hop_size</span> <span class="o">=</span> <span class="p">(</span><span class="n">grain_size</span> <span class="o">/</span> <span class="n">overlap</span><span class="p">)</span> <span class="o">*</span> <span class="n">output</span><span class="o">.</span><span class="n">samplerate</span><span class="o">/</span><span class="mi">1000</span>
|
||||
<span class="n">_grain_size</span> <span class="o">*=</span> <span class="n">output</span><span class="o">.</span><span class="n">samplerate</span> <span class="o">/</span> <span class="mi">1000</span>
|
||||
<span class="n">output_frames</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">_grain_size</span> <span class="o">+</span> <span class="p">(</span><span class="n">hop_size</span><span class="o">*</span><span class="nb">len</span><span class="p">(</span><span class="n">grain_matches</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
|
||||
<span class="n">_grain_size</span> <span class="o">*=</span> <span class="nb">int</span><span class="p">(</span><span class="n">output</span><span class="o">.</span><span class="n">samplerate</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">)</span>
|
||||
<span class="n">output_frames</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">_grain_size</span><span class="o">*</span><span class="mi">2</span> <span class="o">+</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">hop_size</span><span class="o">*</span><span class="nb">len</span><span class="p">(</span><span class="n">grain_matches</span><span class="p">))))</span>
|
||||
<span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">for</span> <span class="n">target_grain_ind</span><span class="p">,</span> <span class="n">matches</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">grain_matches</span><span class="p">):</span>
|
||||
<span class="c"># If there are multiple matches, choose a match at random</span>
|
||||
@@ -1024,12 +1065,27 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="n">match_index</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="n">matches</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="n">match_db_ind</span><span class="p">,</span> <span class="n">match_grain_ind</span> <span class="o">=</span> <span class="n">matches</span><span class="p">[</span><span class="n">match_index</span><span class="p">]</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">match_db</span><span class="o">.</span><span class="n">analysed_audio</span><span class="p">[</span><span class="n">match_db_ind</span><span class="p">]</span> <span class="k">as</span> <span class="n">match_sample</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">"Synthesizing grain:</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source sample: {0}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source grain index: {1}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target output: {2}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target grain index: {3} out of {4}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">match_sample</span><span class="p">,</span>
|
||||
<span class="n">match_grain_ind</span><span class="p">,</span>
|
||||
<span class="n">output_name</span><span class="p">,</span>
|
||||
<span class="n">target_grain_ind</span><span class="p">,</span>
|
||||
<span class="nb">len</span><span class="p">(</span><span class="n">grain_matches</span><span class="p">)</span>
|
||||
<span class="p">))</span>
|
||||
<span class="n">match_sample</span><span class="o">.</span><span class="n">generate_grain_times</span><span class="p">(</span><span class="n">match_grain_size</span><span class="p">,</span> <span class="n">match_overlap</span><span class="p">,</span> <span class="n">save_times</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># TODO: Make proper fix for grain index offset of 1</span>
|
||||
<span class="n">match_grain</span> <span class="o">=</span> <span class="n">match_sample</span><span class="p">[</span><span class="n">match_grain_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">match_grain</span> <span class="o">=</span> <span class="n">match_sample</span><span class="p">[</span><span class="n">match_grain_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms_bool</span><span class="p">:</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity_bool</span><span class="p">:</span>
|
||||
<span class="c"># Get the target sample from the database</span>
|
||||
<span class="n">target_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_db</span><span class="p">[</span><span class="n">job_ind</span><span class="p">]</span>
|
||||
|
||||
@@ -1037,7 +1093,7 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># indexing.</span>
|
||||
<span class="n">target_sample</span><span class="o">.</span><span class="n">generate_grain_times</span><span class="p">(</span><span class="n">match_grain_size</span><span class="p">,</span> <span class="n">match_overlap</span><span class="p">,</span> <span class="n">save_times</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">match_grain</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_rms</span><span class="p">(</span><span class="n">match_grain</span><span class="p">,</span> <span class="n">match_sample</span><span class="p">,</span> <span class="n">match_grain_ind</span><span class="p">,</span> <span class="n">target_sample</span><span class="p">,</span> <span class="n">target_grain_ind</span><span class="p">)</span>
|
||||
<span class="n">match_grain</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_intensity</span><span class="p">(</span><span class="n">match_grain</span><span class="p">,</span> <span class="n">match_sample</span><span class="p">,</span> <span class="n">match_grain_ind</span><span class="p">,</span> <span class="n">target_sample</span><span class="p">,</span> <span class="n">target_grain_ind</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_f0_bool</span><span class="p">:</span>
|
||||
<span class="c"># Get the target sample from the database</span>
|
||||
@@ -1049,8 +1105,12 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="n">match_grain</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">enforce_pitch</span><span class="p">(</span><span class="n">match_grain</span><span class="p">,</span> <span class="n">match_sample</span><span class="p">,</span> <span class="n">match_grain_ind</span><span class="p">,</span> <span class="n">target_sample</span><span class="p">,</span> <span class="n">target_grain_ind</span><span class="p">)</span>
|
||||
|
||||
<span class="c"># Apply hanning window to grain</span>
|
||||
<span class="n">match_grain</span> <span class="o">*=</span> <span class="n">np</span><span class="o">.</span><span class="n">hanning</span><span class="p">(</span><span class="n">match_grain</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
||||
<span class="n">output_frames</span><span class="p">[</span><span class="n">offset</span><span class="p">:</span><span class="n">offset</span><span class="o">+</span><span class="n">match_grain</span><span class="o">.</span><span class="n">size</span><span class="p">]</span> <span class="o">+=</span> <span class="n">match_grain</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">output_frames</span><span class="p">[</span><span class="n">offset</span><span class="p">:</span><span class="n">offset</span><span class="o">+</span><span class="n">match_grain</span><span class="o">.</span><span class="n">size</span><span class="p">]</span> <span class="o">+=</span> <span class="n">match_grain</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="n">pdb</span><span class="o">.</span><span class="n">set_trace</span><span class="p">()</span>
|
||||
<span class="n">offset</span> <span class="o">+=</span> <span class="n">hop_size</span>
|
||||
<span class="c"># If output normalization is active, normalize output.</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"normalize"</span><span class="p">]:</span>
|
||||
@@ -1068,6 +1128,10 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># TODO: Make proper fix for grain index offset of 1</span>
|
||||
<span class="n">target_times</span> <span class="o">=</span> <span class="n">target_sample</span><span class="o">.</span><span class="n">times</span><span class="p">[</span><span class="n">target_grain_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
<span class="c"># Get mean harmonic ratio of f0 frames in time range specified.</span>
|
||||
<span class="n">target_harmonic_ratio</span> <span class="o">=</span> <span class="n">target_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">target_times</span><span class="p">,</span> <span class="s">"harm_ratio"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"mean"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="c"># Get mean of f0 frames in time range specified.</span>
|
||||
<span class="n">target_f0</span> <span class="o">=</span> <span class="n">target_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">target_times</span><span class="p">,</span> <span class="s">"f0"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"median"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
@@ -1075,55 +1139,48 @@ div.nboutput > :nth-child(2).stderr {
|
||||
<span class="c"># TODO: Make proper fix for grain index offset of 1</span>
|
||||
<span class="n">source_times</span> <span class="o">=</span> <span class="n">source_sample</span><span class="o">.</span><span class="n">times</span><span class="p">[</span><span class="n">source_grain_ind</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
|
||||
<span class="c"># Get mean harmonic ratio of f0 frames in time range specified.</span>
|
||||
<span class="n">source_harmonic_ratio</span> <span class="o">=</span> <span class="n">source_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">source_times</span><span class="p">,</span> <span class="s">"harm_ratio"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"mean"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">hr_array</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">source_harmonic_ratio</span><span class="p">,</span> <span class="n">target_harmonic_ratio</span><span class="p">])</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">any</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">hr_array</span><span class="p">)):</span>
|
||||
<span class="k">return</span> <span class="n">grain</span><span class="o">*</span><span class="mi">0</span>
|
||||
|
||||
<span class="c"># Get mean of f0 frames in time range specified.</span>
|
||||
<span class="n">source_f0</span> <span class="o">=</span> <span class="n">source_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">source_times</span><span class="p">,</span> <span class="s">"f0"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"median"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="n">ratio_difference</span> <span class="o">=</span> <span class="n">target_f0</span> <span class="o">/</span> <span class="n">source_f0</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="n">ratio_difference</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">grain</span>
|
||||
<span class="k">return</span> <span class="n">grain</span><span class="o">*</span><span class="mi">0</span>
|
||||
|
||||
<span class="c"># If the ratio difference is within the limits</span>
|
||||
<span class="n">ratio_limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"enf_f0_ratio_limit"</span><span class="p">]</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ratio_difference</span> <span class="o">></span> <span class="n">ratio_limit</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">"Grain f0 ratio too large({0}), enforcing f0 at limit ({1})</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source sample: {2}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source grain index: {3}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target sample: {4}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target grain index: {5}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">"Grain f0 ratio too large({0}), enforcing f0 at limit ({1})"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">ratio_difference</span><span class="p">,</span>
|
||||
<span class="n">ratio_limit</span><span class="p">,</span>
|
||||
<span class="n">source_sample</span><span class="p">,</span>
|
||||
<span class="n">source_grain_ind</span><span class="p">,</span>
|
||||
<span class="n">target_sample</span><span class="p">,</span>
|
||||
<span class="n">target_grain_ind</span>
|
||||
<span class="p">))</span>
|
||||
<span class="n">ratio_difference</span> <span class="o">=</span> <span class="n">ratio_limit</span>
|
||||
<span class="k">elif</span> <span class="n">ratio_difference</span> <span class="o"><</span> <span class="mf">1.</span><span class="o">/</span><span class="n">ratio_limit</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">"Grain f0 ratio too large ({0}), enforcing f0 at limit ({1})</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source sample: {2}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source grain index: {3}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target sample: {4}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target grain index: {5}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">"Grain f0 ratio too large ({0}), enforcing f0 at limit ({1})"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">ratio_difference</span><span class="p">,</span>
|
||||
<span class="mf">1.</span><span class="o">/</span><span class="n">ratio_limit</span><span class="p">,</span>
|
||||
<span class="n">source_sample</span><span class="p">,</span>
|
||||
<span class="n">source_grain_ind</span><span class="p">,</span>
|
||||
<span class="n">target_sample</span><span class="p">,</span>
|
||||
<span class="n">target_grain_ind</span>
|
||||
<span class="p">))</span>
|
||||
<span class="n">ratio_difference</span> <span class="o">=</span> <span class="mf">1.</span><span class="o">/</span><span class="n">ratio_limit</span>
|
||||
|
||||
<span class="n">grain</span> <span class="o">=</span> <span class="n">pitch_shift</span><span class="o">.</span><span class="n">shift</span><span class="p">(</span><span class="n">grain</span><span class="p">,</span> <span class="n">ratio_difference</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ratio_difference</span> <span class="o">></span> <span class="n">ratio_limit</span> <span class="ow">or</span> <span class="n">ratio_difference</span> <span class="o"><</span> <span class="mf">1.</span><span class="o">/</span><span class="n">ratio_limit</span><span class="p">:</span>
|
||||
<span class="n">grain</span> <span class="o">*=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">grain</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">enforce_rms</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grain</span><span class="p">,</span> <span class="n">source_sample</span><span class="p">,</span> <span class="n">source_grain_ind</span><span class="p">,</span> <span class="n">target_sample</span><span class="p">,</span> <span class="n">target_grain_ind</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">enforce_intensity</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">grain</span><span class="p">,</span> <span class="n">source_sample</span><span class="p">,</span> <span class="n">source_grain_ind</span><span class="p">,</span> <span class="n">target_sample</span><span class="p">,</span> <span class="n">target_grain_ind</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Scales the amplitude of the grain by the difference between it's rms and the rms of the grain specified.</span>
|
||||
<span class="sd"> Scales the amplitude of the grain by the difference between it's intensity and the intensity of the grain specified.</span>
|
||||
|
||||
<span class="sd"> This method will fail if either AnalysedAudioFile object does not have an rms analysis.</span>
|
||||
<span class="sd"> This method will fail if either AnalysedAudioFile object does not have any intensity analyses.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="c"># Get grain start and finish range to retreive analysis frames from.</span>
|
||||
@@ -1132,6 +1189,9 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="c"># Get mean of RMS frames in time range specified.</span>
|
||||
<span class="n">target_rms</span> <span class="o">=</span> <span class="n">target_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">target_times</span><span class="p">,</span> <span class="s">"rms"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"mean"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">target_peak</span> <span class="o">=</span> <span class="n">target_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">target_times</span><span class="p">,</span> <span class="s">"peak"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"mean"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="n">target_intensity_value</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">([</span><span class="n">target_rms</span><span class="p">,</span> <span class="n">target_peak</span><span class="p">])</span>
|
||||
|
||||
<span class="c"># Get grain start and finish range to retreive analysis frames from.</span>
|
||||
<span class="c"># TODO: Make proper fix for grain index offset of 1</span>
|
||||
@@ -1139,30 +1199,28 @@ div.nboutput > :nth-child(2).stderr {
|
||||
|
||||
<span class="c"># Get mean of RMS frames in time range specified.</span>
|
||||
<span class="n">source_rms</span> <span class="o">=</span> <span class="n">source_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">source_times</span><span class="p">,</span> <span class="s">"rms"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"mean"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">source_peak</span> <span class="o">=</span> <span class="n">source_sample</span><span class="o">.</span><span class="n">analysis_data_grains</span><span class="p">(</span><span class="n">source_times</span><span class="p">,</span> <span class="s">"peak"</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="s">"mean"</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
||||
<span class="n">source_intensity_value</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">([</span><span class="n">source_rms</span><span class="p">,</span> <span class="n">source_peak</span><span class="p">])</span>
|
||||
|
||||
<span class="n">ratio_difference</span> <span class="o">=</span> <span class="n">target_intensity_value</span> <span class="o">/</span> <span class="n">source_intensity_value</span>
|
||||
|
||||
<span class="n">ratio_difference</span> <span class="o">=</span> <span class="n">target_rms</span> <span class="o">/</span> <span class="n">source_rms</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">np</span><span class="o">.</span><span class="n">isfinite</span><span class="p">(</span><span class="n">ratio_difference</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">grain</span>
|
||||
<span class="c"># If the ratio difference is within the limits</span>
|
||||
<span class="n">ratio_limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"enf_rms_ratio_limit"</span><span class="p">]</span>
|
||||
<span class="n">ratio_limit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">synthesizer</span><span class="p">[</span><span class="s">"enf_intensity_ratio_limit"</span><span class="p">]</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ratio_difference</span> <span class="o">></span> <span class="n">ratio_limit</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s">"Grain RMS ratio too large({0}), enforcing RMS at limit ({1})</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source sample: {2}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Source grain index: {3}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target sample: {4}</span><span class="se">\n</span><span class="s">"</span>
|
||||
<span class="s">"Target grain index: {5}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">ratio_difference</span><span class="p">,</span>
|
||||
<span class="n">ratio_limit</span><span class="p">,</span>
|
||||
<span class="n">source_sample</span><span class="p">,</span>
|
||||
<span class="n">source_grain_ind</span><span class="p">,</span>
|
||||
<span class="n">target_sample</span><span class="p">,</span>
|
||||
<span class="n">target_grain_ind</span>
|
||||
<span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
|
||||
<span class="s">"Grain RMS ratio too large({0}), enforcing RMS at limit ({1})</span><span class="se">\n</span><span class="s">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">ratio_difference</span><span class="p">,</span>
|
||||
<span class="n">ratio_limit</span><span class="p">,</span>
|
||||
<span class="p">))</span>
|
||||
<span class="n">ratio_difference</span> <span class="o">=</span> <span class="n">ratio_limit</span>
|
||||
|
||||
<span class="n">grain</span> <span class="o">*=</span> <span class="n">ratio_difference</span>
|
||||
|
||||
|
||||
<span class="k">return</span> <span class="n">grain</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">swap_databases</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
||||
BIN
Binary file not shown.
+1
-1
File diff suppressed because one or more lines are too long
@@ -1,5 +1,9 @@
|
||||
API
|
||||
===
|
||||
This section contains the details of the underlying code used to create the
|
||||
concatenator script. This is included so that developer may use the library for
|
||||
further work in this area and aims to provide a complete description of
|
||||
functions and class structures in an easy to use format.
|
||||
|
||||
-------------------
|
||||
AudioFile Class
|
||||
|
||||
+40
-34
@@ -2,6 +2,11 @@
|
||||
|
||||
Audio Descriptor Definitions
|
||||
============================
|
||||
This section describes the audio descriptors used for analysing chacteristics
|
||||
of the audio files. Each descriptor is used for measuring a specific
|
||||
characteristic and multiple descriptors are combined to match grains based on
|
||||
the amalgamation of these measurements. For example, Using the F0 and RMS
|
||||
descriptors would match audio based on it's pitch and energy.
|
||||
|
||||
Centroid
|
||||
~~~~~~~~~~~~~~~~~
|
||||
@@ -10,7 +15,7 @@ used to determine the central point of a signal's amplitude and is calculated
|
||||
as:
|
||||
|
||||
.. math::
|
||||
C(n) = \frac{\sum_{i=i_s(n)}^{i_e(n)}(i-i_s(n)) \cdot x(i)}{\sum_{i=i_s(n)}^{i_e(n)} \cdot x(n)}
|
||||
C(n) = \frac{\sum_{i=i_s(n)}^{i_e(n)}(i-i_s(n)) \cdot x(i)}{\sum_{i=i_s(n)}^{i_e(n)} \cdot x(n)}.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
@@ -29,10 +34,10 @@ defined as:
|
||||
.. math::
|
||||
R_n(m) = \sum_{i=i_s(n)}^{i_e(n)} x(i) x(i-m)
|
||||
|
||||
Then normalizing:
|
||||
then normalizing:
|
||||
|
||||
.. math::
|
||||
\Gamma_n(m) = \frac{R_n(m)}{\sqrt{\sum_{i=i_s(n)}^{i_e(n)}x(i)^2 \sum_{i=i_s(n)}^{i_e(n)}x(i-m)^2}}
|
||||
\Gamma_n(m) = \frac{R_n(m)}{\sqrt{\sum_{i=i_s(n)}^{i_e(n)}x(i)^2 \sum_{i=i_s(n)}^{i_e(n)}x(i-m)^2}}.
|
||||
|
||||
The fundamental period of the signal is then calculated as the point between
|
||||
:math:`T_{min}` and :math:`T_{max}` at which the correlated signal most closely matches the
|
||||
@@ -40,11 +45,11 @@ original. :math:`T_{min}` and :math:`T_{max}` are defined as the minimum and max
|
||||
the fundamental period.
|
||||
|
||||
.. math::
|
||||
y = arg\,max_{T_{min} \leq m \leq T_{max}} \{\Gamma_i(m)\}
|
||||
y = arg\,max_{T_{min} \leq m \leq T_{max}} \{\Gamma_i(m)\}.
|
||||
|
||||
In order to improve the accuracy of peak detection, parabolic interpolation is
|
||||
used to estimate the peak's location with greater accuracy by using the peak
|
||||
correlation and it's two closes neighbour's values to estimate the fractional
|
||||
correlation and it's two closest neighbour's values to estimate the fractional
|
||||
peak value.
|
||||
|
||||
The method for parabolic interpolation is defined as:
|
||||
@@ -61,7 +66,7 @@ Ref: :cite:`smith2011sasp`
|
||||
From this, the fundamental period the frequency is then calculated as:
|
||||
|
||||
.. math::
|
||||
f_0^n = \frac{1}{T_0^n}
|
||||
f_0^n = \frac{1}{T_0^n}.
|
||||
|
||||
Ref: :cite:`itaa2014`
|
||||
|
||||
@@ -73,25 +78,25 @@ Fourier Transform for windows of a signal. The full description of this
|
||||
transform is outside the scope of this project, however it should be understood
|
||||
that this analysis provides a description of the spectral content of a windowed
|
||||
signal. By applying the transform, a number of bins of size :math:`K` are
|
||||
calculated that detail the sine and cosine apmlitudes required to reconstruct
|
||||
calculated that detail the sine and cosine amplitudes required to reconstruct
|
||||
the signal. The calculation of the STFT is defined as:
|
||||
|
||||
.. math::
|
||||
X(k,n) = \sum_{i=i_s(n)}^{i_e(n)} x(i) \exp{\Big(-jk \cdot (i -
|
||||
i_s(n))\frac{2\pi}{K}\Big)}
|
||||
i_s(n))\frac{2\pi}{K}\Big)}.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
Harmonic Ratio
|
||||
~~~~~~~~~~~~~~
|
||||
The harmonic ratio can be used to differentiate between noisy and periodic
|
||||
signals. higher values suggest that the signal is more periodic (such as a sine
|
||||
signals. Higher values suggest that the signal is more periodic (such as a sine
|
||||
wave) and lower values represent less periodicity. This can be used as a form
|
||||
of confidence measure in determining the validity of F0 values. it is
|
||||
of confidence measure in determining the validity of F0 values. It is
|
||||
calculated as part of the F0 estimation algorithm as:
|
||||
|
||||
.. math::
|
||||
HR(n) = max_{T_{min} \leq m \leq T_{max}}{\{T_n(m)\}}
|
||||
HR(n) = max_{T_{min} \leq m \leq T_{max}}{\{T_n(m)\}}.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
@@ -102,26 +107,27 @@ values indicate a flatter distribution and positive values indicate a more
|
||||
"peaky" distribution. Kurtosis is calculated as:
|
||||
|
||||
.. math::
|
||||
TK(n)=\frac{1}{\sigma_x^4(n) \cdot K}\sum_{i=i_s(n)}^{i_e(n)}\Big(x(i)-\mu_x(n)\Big)^4-3
|
||||
TK(n)=\frac{1}{\sigma_x^4(n) \cdot K}\sum_{i=i_s(n)}^{i_e(n)}\Big(x(i)-\mu_x(n)\Big)^4-3.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
Peak Amplitude
|
||||
~~~~~~~~~~~~~~
|
||||
Peak amplitude measures the highest peak in the absoulte signal. it is
|
||||
Peak amplitude measures the highest peak in the absolute signal. It is
|
||||
calculated as:
|
||||
|
||||
.. math::
|
||||
P(n) = \max_{i_s(n) \leq i \leq i_e(n)}\{\left|x(i)\right|\}
|
||||
P(n) = \max_{i_s(n) \leq i \leq i_e(n)}\{\left|x(i)\right|\}.
|
||||
|
||||
RMS
|
||||
~~~
|
||||
The perceived loudness of a signal is an important feature as it can be related
|
||||
to the dynamics of the signal. RMS is used as a measure of sound intensity and
|
||||
is used for distinguishing between loud and quiet audio. It is calculated as:
|
||||
is used for distinguishing between loud and quiet audio. It is calculated as,
|
||||
where $K$ is the total number of samples:
|
||||
|
||||
.. math::
|
||||
RMS(n) = \sqrt{\frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)} x(i)^2}
|
||||
RMS(n) = \sqrt{\frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)} x(i)^2}.
|
||||
|
||||
Other methods that take the human perception of loudness into account may
|
||||
provide more perceptually relevant results. However the RMS measurement
|
||||
@@ -131,13 +137,13 @@ Ref: :cite:`lerch2012itaca`
|
||||
|
||||
Spectral Centroid
|
||||
~~~~~~~~~~~~~~~~~
|
||||
The spectral centroid measure the center of gravity accross frequency bins to
|
||||
determine the central point accross the spectral content of the frame. High
|
||||
value sindicate that the spectral content is centered in higher frequencies and
|
||||
lower value indicate a lower center. The spectral centroid is calculated as:
|
||||
The spectral centroid measure the centre of gravity across frequency bins to
|
||||
determine the central point across the spectral content of the frame. High
|
||||
values indicate that the spectral content is centred in higher frequencies and
|
||||
lower value indicate a lower centre. The spectral centroid is calculated as:
|
||||
|
||||
.. math::
|
||||
SC(n) = \frac{\sum_{k=0}^{K/2-1} k \cdot | X(k,n) | ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}
|
||||
SC(n) = \frac{\sum_{k=0}^{K/2-1} k \cdot | X(k,n) | ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}.
|
||||
|
||||
The result is the sum of magnitudes, weighted by their index, normalized by the
|
||||
unweighted sum.
|
||||
@@ -146,14 +152,14 @@ Ref: :cite:`lerch2012itaca`
|
||||
|
||||
Spectral Crest Factor
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
The spectral crest factor can be used as a mesure of tonalness of the signal.
|
||||
it is calculated by taking the maximum magnitude and dividing by the sum of
|
||||
The spectral crest factor can be used as a measure of tonalness of the signal.
|
||||
It is calculated by taking the maximum magnitude and dividing by the sum of
|
||||
magnitudes.
|
||||
This differntiates between flat spectrums and sinusoidal spectrums. (low values
|
||||
represnting the former and high values representing the latter.)
|
||||
This differentiates between flat spectrums and sinusoidal spectrums. (low values
|
||||
representing the former and high values representing the latter.)
|
||||
|
||||
.. math::
|
||||
SCF = \frac{ \max_{0 \leq k \leq K/2-1} \{| X(k,n) | \}}{\sum_{k=0}^{K/2-1} | X(k,n) | }
|
||||
SCF = \frac{ \max_{0 \leq k \leq K/2-1} \{| X(k,n) | \}}{\sum_{k=0}^{K/2-1} | X(k,n) | }.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
@@ -166,7 +172,7 @@ values that represent a more tonal signal. Spectral flatness is calculated as:
|
||||
|
||||
.. math::
|
||||
TFl(n) = \frac{\sqrt[K/2]{\prod_{k=0}^{K/2-1} | X(k,n) | }}{2/K \cdot
|
||||
\sum_{k=0}^{K/2-1} | X(k,n) | }
|
||||
\sum_{k=0}^{K/2-1} | X(k,n) | }.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
@@ -175,11 +181,11 @@ Spectral Flux
|
||||
Spectral flux is a measure of change between consecutive frames. It calculates
|
||||
the average difference between frames to differentiate between adjacent frames
|
||||
that are largely dissimilar (suggesting a non-stationary section of signal) and
|
||||
similiar frames (that suggests a steady state signal). It is calculated as:
|
||||
similar frames (that suggests a steady state signal). It is calculated as:
|
||||
|
||||
.. math::
|
||||
SF(n) = \frac{\sqrt{\sum_{k=0}^{K/2-1} \Big( | X(k,n) | - | X(k,n-1) | \Big)^2
|
||||
}}{K/2}
|
||||
}}{K/2}.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
@@ -191,7 +197,7 @@ and is associated with perceptions of timbre. It is calculated as:
|
||||
|
||||
.. math::
|
||||
SS(n) = \sqrt{\frac{\sum_{k=0}^{K/2-1} \Big(k-SC(n)\Big)^2 \cdot | X(k,n)
|
||||
| ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}}
|
||||
| ^2}{\sum_{k=0}^{K/2-1} | X(k,n) | ^2}}.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
@@ -201,19 +207,19 @@ The variance of a signal measures it's spread around the signal's arithmetic
|
||||
mean. It is used in the calculation of Kurtosis and is calculated as:
|
||||
|
||||
.. math::
|
||||
\sigma_x^2 = \frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)}(x(i) - \mu_x(n))^2
|
||||
\sigma_x^2 = \frac{1}{K} \sum_{i=i_s(n)}^{i_e(n)}(x(i) - \mu_x(n))^2.
|
||||
|
||||
Ref: :cite:`lerch2012itaca`
|
||||
|
||||
Zero-Crossing
|
||||
~~~~~~~~~~~~~
|
||||
The zero-crossing rate counts the number of times a signal's value changes from
|
||||
positive to negative in a frame. it is relevant to determining the noisiness of
|
||||
a signal, as noisy signals will pass from positive to negative more frequenctly
|
||||
positive to negative in a frame. It is relevant to determining the noisiness of
|
||||
a signal, as noisy signals will pass from positive to negative more frequently
|
||||
than period signals. It is calculated as:
|
||||
|
||||
.. math::
|
||||
Z(n) = \frac{1}{2K} \sum_{i=i_s(n)}^{i_e(n)} | sgn[x(i)] - sgn[x(i-1)] |
|
||||
Z(n) = \frac{1}{2K} \sum_{i=i_s(n)}^{i_e(n)} | sgn[x(i)] - sgn[x(i-1)] |
|
||||
|
||||
\text{Where the sgn function is defined as:}
|
||||
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
API Usage Examples
|
||||
==================
|
||||
|
||||
This section aims to give use case examples for the API. This shows how the
|
||||
code can be used to create a python script similar to that of the concatenator
|
||||
script.
|
||||
|
||||
WARNING: As examples use the same files, only one notebook can be run at a
|
||||
time. Make sure one notebook has been closed and halted before starting the
|
||||
next.
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
Installation
|
||||
============
|
||||
|
||||
This section provides installation instructions for installing the concatenator
|
||||
project on your system. There are alternative methods that will most likely
|
||||
work for installing both the project and many of it's dependencies, however
|
||||
the method shown below has been tested and is therefore the most reliable
|
||||
method for installing this project.
|
||||
|
||||
Prerequesites
|
||||
-------------
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ To create the final output, there are three main operations to perform:
|
||||
|
||||
.. graphviz::
|
||||
|
||||
digraph a[center=True] {
|
||||
digraph a {
|
||||
"Database Analysis" -> "Grain Matching" -> "Output Synthesis";
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ For this demonstration, the following file structure will be used:
|
||||
|-- target.03.wav
|
||||
`-- target.04.wav
|
||||
|
||||
A source database containing a small selection of trumpet samples (aquired from
|
||||
A source database containing a small selection of trumpet samples (acquired from
|
||||
|
||||
http://theremin.music.uiowa.edu/MIS.html) will be used to match grains with 4
|
||||
target sounds. This will produce 4 output files, one for each target sound.
|
||||
@@ -417,7 +417,9 @@ concatenate.py Script Flags
|
||||
|
||||
--match_method Choose the algorithm to use when matching analyses. Available algorithms are:
|
||||
|
||||
Brute force: 'bruteforce'
|
||||
Brute force: 'bruteforce' (BROKEN. The brute force
|
||||
matcher no longer works with the current release of
|
||||
this script. Use the K-d Tree Search.)
|
||||
|
||||
K-d Tree Search: 'kdtree'
|
||||
|
||||
|
||||
+4
-2
@@ -326,7 +326,7 @@ works by analysing overlapping segments of audio (known as grains) from both
|
||||
`-- target.04.wav
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>A source database containing a small selection of trumpet samples (aquired from</p>
|
||||
<p>A source database containing a small selection of trumpet samples (acquired from</p>
|
||||
<p><a class="reference external" href="http://theremin.music.uiowa.edu/MIS.html">http://theremin.music.uiowa.edu/MIS.html</a>) will be used to match grains with 4
|
||||
target sounds. This will produce 4 output files, one for each target sound.</p>
|
||||
<p>The following command is used to to generate the output:</p>
|
||||
@@ -652,7 +652,9 @@ databases.</td></tr>
|
||||
<tr><td class="option-group">
|
||||
<kbd><span class="option">--match_method</span></kbd></td>
|
||||
<td><p class="first">Choose the algorithm to use when matching analyses. Available algorithms are:</p>
|
||||
<p>Brute force: ‘bruteforce’</p>
|
||||
<p>Brute force: ‘bruteforce’ (BROKEN. The brute force
|
||||
matcher no longer works with the current release of
|
||||
this script. Use the K-d Tree Search.)</p>
|
||||
<p class="last">K-d Tree Search: ‘kdtree’</p>
|
||||
</td></tr>
|
||||
<tr><td class="option-group">
|
||||
|
||||
Reference in New Issue
Block a user