riggsd / zcant Goto Github PK
View Code? Open in Web Editor NEWMyotisoft ZCANT, a zero-crossing analysis tool for bat echolocation data
License: MIT License
Myotisoft ZCANT, a zero-crossing analysis tool for bat echolocation data
License: MIT License
Add batch .WAV to Anabat file conversion back to the application.
Depends on #13.
Make sure the app builds on Windows 7, 10.
Provide a pre-compiled executable so end users don't need to know anything about Python or dependency installation.
Writing print('\a')
doesn't actually sound a bell when there's no stdout (like when running from a py2app .app. Package up a .WAV file to utilize for warnings.
Discuss metadata options with Chris, but ideally a saved zero-cross file should retain its original amplitudes.
Quick comparison of our zcant.conversion.read_wav()
routine versus scipy.io.wavfile.read()
. Shows that the latter is ~100 times faster, and can sometimes be ~600 times faster when using mmap. The difference isn't quite as great with smaller .WAV files, but amounts to a 0.5sec loadtime difference for a 10mb .WAV file.
Our implementation uses Struct.unpack_from()
, which yields a Python list, and is in turn converted to an np.ndarray
. Their implementation uses np.fromstring()
or np.memmap()
so the extraction is performed entirely in C.
Either switch to using scipy.io.wavfile.read()
or utilize the more efficient C-based functions for loading wav data.
import timeit
import os.path
n = 1
size = float(os.path.getsize('test.wav')) / 1024 / 1024
print 'loading file "test.wav" (%.1f mb) %d times...' % (size, n)
print '\nzcant.conversion.load_wav()'
t = timeit.Timer('load_wav("test.wav")', 'from zcant.conversion import load_wav')
print '%.4f' % t.timeit(n)
print '\nscipy.io.wavfile.read()'
t = timeit.Timer('wavfile.read("test.wav")', 'from scipy.io import wavfile')
print '%.4f' % t.timeit(n)
print '\nscipy.io.wavfile.read(mmap=True)'
t = timeit.Timer('wavfile.read("test.wav", mmap=True)', 'from scipy.io import wavfile')
print '%.4f' % t.timeit(n)
loading file "test.wav" (11.0 mb) 1 times...
zcant.conversion.load_wav()
0.5974
scipy.io.wavfile.read()
0.0084
scipy.io.wavfile.read(mmap=True)
0.0015
Look into ensuring that all signal-processing code is vectorized as native numpy C-code, or look into other alternatives like:
http://berkeleyanalytics.com/bottleneck/
https://github.com/pydata/numexpr
https://cython.readthedocs.io/en/latest/src/tutorial/numpy.html
Allow end users to drag files or filenames into the app and magically open them (on all platforms).
Make the keyboard shortcuts available from the Help -> Keyboard Shortcuts menu item.
Consider making it printable.
Provide a .PDF for reference as well?
(Note that keybindings are slightly different on OS X, Windows)
Correctly fill out all available metadata.
Ensure that the produced Anabat file doesn't exceed these limits:
Should we split a large file over multiple Anabat files? Truncate with warning? Fail?
The rewritten version of wxPython, "Phoenix", is now being made available as a binary wheel for major platforms, making its installation significantly easier. It is currently in beta release, which minor API changes still happening. Track its development and plan a port to the new version once it appears mature.
Allow time-expanded and realtime audio playback of .WAV files.
Add a view which respects real time on the X axis, but which collapses the empty space between pulses.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.