text-mode audio file viewer
file 0:00:05:53.851 mathr_-_lockaccum.wav
view 0:00:00:00.232 gain 1 | speed 1
at 0:00:05:31.395
^ |
^^^ ^ + ^ ^^ ^ ^ ^^ | ^^ ^ ^^
^++~ ^~ ~ ^+ ~~ @ +@+ ^@@ |~^ ^~@ @~ ^~+ ~^
~~~*^~* @^+@^^@* ~~ @~~ ~*~^ ^|@~ ~@*~ ~~@^ ^@@~ ^~*~^ ^
^ ~~***@~*@ ~~~~~+~@ ^+@ ~v* @~v+ ~|~* ^@~~@ ~@v~~ ~~~@^^^ ^~@@@~^ ^^+
@@@@@@@@@--@----@-------------@--------@|-@----------@---@-------@---@@---@----@
vv v***+@~+~ ** @* +~* +~~ *^^+ @^~+| +~~~ v@~~*v +@^@@ v~@@@*~ v@~@@~
~**+~v+@ @~ ~@ v@@ v@@ ~@++ v@@v| v@@@ ~@@~ v~~~+ +~~~v ~@*+
v~~vv vv ~v v~ ~~ ~* v~@v +~ | ~~~ v~v v@vv vvv +v~v
+ v v v v~ ~ vv | vv v v
v |
^ ^ ^ ^ ^^^ ^ | ^ ^^
^^~~ +~ ~ ^~ ~~ ~^ ~~~ ^~~ ^|~^ ^@~^ @+^ ~~^ ^~~
++**^~* @ +@^ @@ @+ @@* ~@@^ +|@+ ~*@+ ^~~@~ ^@@~ ~** ^
~ ^ ^~~*@~@@ ~^~~~^~* ^v~ ~v@ @~v+ ~|~@^ @~~@ +@v~*^ +~+@^^ ~^@@@~ ^ ~
@@@@@@--@-@-----@-@------@-------------@|----------------@---@---@----@---@----@
vv v +@@*~*~++v@* ** +^@ v~* *^^~ @^~~| v@++v @^~@ ~@^~* ~~~@@~v vv@@@@*
v~**+~++@ ** ~@ v@* @@ ~@@v ~@*v| *@@ *@@~ ~@@~ v@@~~v ~*~v~
v~~vvvvv ~~ v* ~~ ~~ ~~ v~@ | ~~~ ~~~ v~v + v~+
vv v ~ v v v v | vvv vvv v v v
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[>]]]]]
Note: this misses ANSI terminal boldness variation highlights.
https://code.mathr.co.uk/harry
git clone https://code.mathr.co.uk/harry.git
required
optional
with SDL audio backend and OpenMP parallism:
make
without SDL:
make SDL=
without OpenMP parallelism:
make OMP=
harry -- text-mode audio file viewer
Copyright (C) 2019,2020 Claude Heiland-Allen
License: GNU AGPLv3+
Usage:
harry [--audio <driver>] FILE
open audio file for interactive viewing
this harry is compiled with these audio drivers:
null
sdl (default)
harry -?,-h,-H,--help
this message
harry -v,-V,--version
output version string
harry -S,--source
output harry's source code to the current working directory
files written: harry.c Makefile README.md COPYING.md
Keys:
ESC, Q quit
Left, Right scroll through time
Up, Down zoom in and out
Home zoom out to fit whole file in view
End zoom in to single samples
W waveform display
S spectrogram display
+, =, -, 1 adjust audio display volume
9, 0 adjust audio output volume
M toggle mute
Space, P toggle playback
[, ] adjust playback speed
Shift-L toggle file looping
l configure A-B looping
F toggle playback cursor follow mode
harry does mipmap reduction for more-correct display of resampled signals.
harry displays signal statistics per cell column, averaged over duration:
v: minimum^: maximum@: average~: deviation-: zeroharry displays RMS energy per octave in rows, higher pitches on top, averaged over duration:
.,+oO0@#: quiet to loudA-B loop points are marked with :, the play cursor is marked with |.
At the bottom is a representation of the whole file: outside the view is [ and ], inside the view is =, loop points are marked |: and :|. The play cursor is marked >.
harry plays sound using SDL2, which has a PulseAudio backend. You can run harry remotely and forward the audio over an SSH tunnel to play from a local audio device:
localhost$ scp ~/.config/pulse/cookie remotehost:.config/pulse/cookie
localhost$ ssh -R 24713:localhost:4713 remotehost
remotehost$ export PULSE_SERVER="tcp:localhost:24713"
remotehost$ harry audio.wav
The remote host does not need PulseAudio daemon running.
initial release
reduced memory consumption to a factor of 5 / 8
fix use of uninitialized memory
close SDL audio device when done
free memory before exit
spectrum rendering via Haar wavelets
harry -- text-mode audio file viewer
Copyright (C) 2019,2020 Claude Heiland-Allen <claude@mathr.co.uk>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see https://www.gnu.org/licenses/.