I have it in my TODO list to implement taking waypoints when pressing the headset button of the openmoko, but that is not done yet.
In the meantime, I did some experiments with audio mapping, and since I did not manage to enter waypoints while recording them, I was looking for a way to make use of them anyway.
Enter findvoice:
$ ./findvoice --help
Usage: findvoice [options] wavfile
Find the times in the wav file when there is clear voice among the noise
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-v, --verbose verbose mode
-p NUM, --percentile=NUM
percentile to use to discriminate noise from voice
(default: 90)
-t, --timestamps print timestamps instead of human readable information
You give it a wav file, and it will output a list of timestamps corresponding to where it things that you were talking clearly and near the FreeRunner / voice recorder instead of leaving the recorder dangling to pick up background noise.
Its algorithm is crude and improvised because I have no background whatsoever in audio processing, but it basically finds those parts of the audio file where the variance of the samples is above a given percentile: the higher the percentile, the less timestamps you get; the lower the percentile, the more likely it is that it picks a period of louder noise.
For example, you can automatically extract waypoints out of an audio file by using it together with Geocoding Unix timestamps:
./findvoice -t today.wav | ./gpxinterpolate today.gpx > today-waypoints.gpx
The timestamps it outputs are computed using the modification time of the
.wav
file: if your system clock was decently synchronised (which you can do
with getgps), then the mtime of the wav is the time of the end of the
recording, which gives the needed reference to compute timestamps that are
absolute in time.
For example:
getgps --sync-time
arecord file.wav
^C
./findvoice -t file.wav | ./gpxinterpolate today.gpx > today-waypoints.gpx