Package: telemeta
Architecture: any
-Depends: ${python:Depends}, python-xml, python-mutagen, python-django (>= 0.96.2), sox, vorbis-tools, flac, normalize-audio, python-mysqldb, mysql-server, octave2.9, python-tk, libgd2-xpm, libsndfile1, python-numpy
+Depends: ${python:Depends}, python-xml, python-mutagen, python-django (>= 0.96.2), sox, vorbis-tools, flac, normalize-audio, python-mysqldb, mysql-server, octave2.9, python-tk, libgd2-xpm, libsndfile1, python-numpy, python-ctypes (>= 1.0.1), libsndfile1
Recommends: lame
Suggests: ecasound, festival, par2
Description: web frontend to backup, transcode and tag any audio content with metadata
from telemeta.analysis.api import *
from telemeta.analysis.core import *
+from telemeta.analysis.channels import *
+from telemeta.analysis.length import *
+from telemeta.analysis.samplerate import *
from telemeta.analysis.max_level import *
from telemeta.analysis.mean_level import *
-from telemeta.analysis.length import *
--- /dev/null
+# Copyright (C) 2008 Parisson SARL
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://svn.parisson.org/telemeta/TelemetaLicense.
+#
+# Author: Guillaume Pellerin <yomguy@parisson.com>
+
+from telemeta.analysis.core import *
+from telemeta.analysis.api import IMediaItemAnalyzer
+import numpy
+
+class ChannelAnalyser(AudioProcessor):
+ """Media item analyzer driver interface"""
+
+ implements(IMediaItemAnalyzer)
+
+ def get_id(self):
+ return "nb_channels"
+
+ def get_name(self):
+ return "Number of channels"
+
+ def get_unit(self):
+ return ""
+
+ def render(self, media_item, options=None):
+ self.pre_process(media_item)
+ return self.channels
# convert to mono by selecting left channel only
if self.channels > 1:
samples = samples[:,0]
- return samples
+ return samples
+
+ def get_samples(self):
+ samples = self.audio_file.read_frames(self.frames)
+ return samples
def read(self, start, size, resize_if_less=False):
""" read size samples starting at start, if resize_if_less is True and less than size
implements(IMediaItemAnalyzer)
- def __init__(self):
- self.fft_size = 2048
- self.window_function = numpy.hanning
- self.window = self.window_function(self.fft_size)
-
def get_id(self):
return "length"
def render(self, media_item, options=None):
self.pre_process(media_item)
- return numpy.round(numpy.divide(self.frames, self.samplerate),2)
+ return numpy.round(float(self.frames)/float(self.samplerate),2)
implements(IMediaItemAnalyzer)
- def __init__(self):
- self.fft_size = 2048
- self.window_function = numpy.hanning
- self.window = self.window_function(self.fft_size)
-
def get_id(self):
return "max_level"
def get_name(self):
- return "Maximum level"
+ return "Maximum peak level"
def get_unit(self):
return "dB"
def render(self, media_item, options=None):
self.pre_process(media_item)
- samples = self.get_mono_samples()
- print str(numpy.max(samples))
+ samples = self.get_samples()
return numpy.round(20*numpy.log10(numpy.max(samples)),2)
\ No newline at end of file
implements(IMediaItemAnalyzer)
- def __init__(self):
- self.fft_size = 2048
- self.window_function = numpy.hanning
- self.window = self.window_function(self.fft_size)
-
def get_id(self):
return "mean_level"
def get_name(self):
- return "Mean level"
+ return "Mean RMS level"
def get_unit(self):
return "dB"
--- /dev/null
+# Copyright (C) 2008 Parisson SARL
+# All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at http://svn.parisson.org/telemeta/TelemetaLicense.
+#
+# Author: Guillaume Pellerin <yomguy@parisson.com>
+
+from telemeta.analysis.core import *
+from telemeta.analysis.api import IMediaItemAnalyzer
+import numpy
+
+class SampleRateAnalyzer(AudioProcessor):
+ """Media item analyzer driver interface"""
+
+ implements(IMediaItemAnalyzer)
+
+ def get_id(self):
+ return "samplerate"
+
+ def get_name(self):
+ return "Samplerate"
+
+ def get_unit(self):
+ return "Hz"
+
+ def render(self, media_item, options=None):
+ self.pre_process(media_item)
+ return self.samplerate
border: 1px solid #adadad;\r
text-align: center;\r
}\r
-.item_visualization select { width: 210px; }\r
+.item_visualization select { width: 240px; }\r
.item_visualization .viewport { width: 305px; border: 1px solid #adadad; overflow: auto; margin-top: 5px; background-color: #fff;}\r
\r
.exporter {\r
padding: 2px;\r
height: 17px;\r
margin: 5px 0 0;\r
- overflow: auto;\r
+ /* overflow: auto; */\r
font-size: 1em;\r
}\r
\r
-.analyser {\r
+.analyzer {\r
background-color: #fff;\r
color: #555;\r
border: 1px solid #adadad;\r
width: 301px;\r
padding: 2px;\r
margin: 5px 0 0;\r
- overflow: auto;\r
+ /* overflow: auto; */\r
font-size: 1em;\r
}\r
\r
<input type="submit" value="OK" />\r
</form>\r
</div>\r
- <div class="exporter">\r
- <p>Download:\r
- {% for format in export_formats %}\r
- <a href="{% url telemeta-item-export item.id|urlencode,format.extension %}">{{ format.name }}</a>\r
- {% endfor %}</p>\r
- </div>\r
- <div class="analyser">\r
- <p>Analysis:</p>\r
- <br>\r
- <table>\r
+ <div class="analyzer">\r
+ <table width="100%">\r
+ <tr>\r
+ <td>Parameter</td>\r
+ <td>Value</td>\r
+ <td>Unit</td>\r
+ <tr>\r
{% for analyser in analysers %}\r
<tr>\r
<td>\r
{{ analyser.name }}\r
</td>\r
- <td> =\r
+ <td> \r
{{ analyser.value }}\r
</td>\r
<td>\r
{% endfor %}\r
</table>\r
</div>\r
+ <div class="exporter">\r
+ <p>Download:\r
+ {% for format in export_formats %}\r
+ <a href="{% url telemeta-item-export item.id|urlencode,format.extension %}">{{ format.name }}</a>\r
+ {% endfor %}</p>\r
+ </div>\r
+\r
</div>\r
{% endif %}\r
<div id="leftcol">\r
if alpha > 0.0 and alpha < 1.0 and y_max_int + 1 < self.image_height:
current_pix = self.pix[x, y_max_int + 1]
-
+
r = int((1-alpha)*current_pix[0] + alpha*color[0])
g = int((1-alpha)*current_pix[1] + alpha*color[1])
b = int((1-alpha)*current_pix[2] + alpha*color[2])
pngFile_w = NamedTemporaryFile(suffix='.png')
pngFile_s = NamedTemporaryFile(suffix='.png')
image_width = 305
- image_height = 152
+ image_height = 150
fft_size = 2048
args = (wav_file, pngFile_w.name, pngFile_s.name, image_width, image_height, fft_size)
create_png(*args)