<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Thanks for the prompt answer!<br><br><div>> why would you want to load the entire file in scipy, when you can use<br>> aubio.source? :) it would avoid bloating your memory, and should be much<br>> much faster. besides aubio.source knows how to read much more than wav<br>> files, provided you compile aubio with libav or ExtAudioFileRef.<br><br>I need to do some filtering first (e.g. high-pass filter) before onsets can be detected. It seems more efficient and less prone to artifacts to process whole sample at once than a window at a time. My recordings are short (1 minute), so burden on memory is minimal. <br><br>If I were to follow your advice then after loading a window I would have to first subject it to high-pass filter, then perform onset detection and stack output of the filter to get a complete high-passed sample at the end. To put into code (and following your example):<br><br>out_sample = numpy.array([])<br>while True:<br>     samples, read = s()<br>     highpassed_samples = highpass_filter(samples)<br>     out_sample = numpy.hstack((samples, highpassed_samples)<br>     if onset_detector(samples):<br>         onsets.append(onset_detector.get_last()<br><br>... which is not only twice slower, but also prone to border problems due to discontinuities in sample (I am reading only hop_size at a time).<br><br>On my GDrive you will find two spectrograms that should show I meant by this:<br>https://drive.google.com/folderview?id=0B46Cy3WOKgyJX1dsUng1T0FSUlk&usp=sharing<br>sample_whole.pdf - highpass filter done over whole sample.<br>sample_windowed.pdf - highpass filter done over windowed sample, read on the fly.<br>simple.wav - example of what I am dealing with. It is actually quite clear sample, many are of much lower quality.<br><br>Perhaps I am not doing something right? After all it seems quite common thing to do some pre-processing and filtering before onset detection.<br><br>Thanks for the hint about setting silence level! <br><br>On a side note: the computing time is important since the program will have to process 10000 hours of recordings. It already does a nice job and helps in nature protection, and so is aubio :-).<br><br><br>Cheers,<br>Lucas<br><br>> <br>> > Here is what I have:<br>> > <br>> > <br>> > onset_detector = onset("energy", window_size, hop_size,<br>> > sample_rate) onsets = []<br>> <br>> you will want to use "default", "ernergy" is by far the worst method<br>> of all.<br>> <br>> > windowed_sample = numpy.array_split(sample, numpy.arange(hop_size,<br>> > len(sample), hop_size)) for frame in windowed_sample: if<br>> > onset_detector(frame): onsets.append(onset_detector.get_last())<br>> <br>> that looks correct.<br>> <br>> > So in fact it simulates reading file from a disc, following what is<br>> >  in examples. One of problems I have with this approach is that I<br>> > am always detecting onset at zero. Is there a smarter solution?<br>> <br>> if the file starts with a frame which level is higher than the silence<br>> threshold, that first frame will be marked as an onset.<br>> <br>> so you could try using onset_detector.set_silence(-60) for instance, just<br>> after creating onset_detector. Default value is -70, in dB SPL.<br>> <br>> > Thanks for the great work!<br>> <br>> you're welcome! :)<br>> <br>> Paul<br>> -----BEGIN PGP SIGNATURE-----<br>> Version: GnuPG/MacGPG2 v2.0.18 (Darwin)<br>> Comment: GPGTools - http://gpgtools.org<br>> Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/<br>> <br>> iEYEARECAAYFAlMndBcACgkQkuC958YALL1vBgCgrS4TL3QbsEIewOsavSxaxObB<br>> Ap4AoKhB5qqadVdbCXpMJnOkpF6u+q8w<br>> =9NVU<br>> -----END PGP SIGNATURE-----<br></div>                                         </div></body>
</html>