├── version.h
├── pitch-track-align
├── main.sml
├── pitch-track-align.mlb
├── Makefile
├── note-track.ttl
├── pitch-track.ttl
└── pitch-track-align.sh
├── deploy
├── osx
│ ├── qt.conf
│ ├── Entitlements.plist
│ ├── sign.sh
│ ├── copy-qt.sh
│ ├── notarize.sh
│ ├── paths.sh
│ ├── deploy-and-package.sh
│ ├── deploy.sh
│ └── Info.plist
├── win64
│ ├── main.bmp
│ ├── top.bmp
│ ├── README-Vamp.txt
│ ├── generate-wxs.ps1
│ ├── build-64.bat
│ ├── build-and-package.bat
│ └── build-64-debug.bat
├── linux
│ ├── deb-skeleton
│ │ ├── usr
│ │ │ ├── lib
│ │ │ │ └── sonic-lineup
│ │ │ │ │ └── README
│ │ │ └── share
│ │ │ │ ├── doc
│ │ │ │ └── sonic-lineup
│ │ │ │ │ ├── changelog.Debian.gz
│ │ │ │ │ └── copyright
│ │ │ │ └── applications
│ │ │ │ └── sonic-lineup.desktop
│ │ └── DEBIAN
│ │ │ └── control
│ ├── fix-lintian-bits.sh
│ ├── docker
│ │ ├── Dockerfile_test_deb.in
│ │ ├── Dockerfile_test_appimage.in
│ │ ├── Dockerfile_deb.in
│ │ └── Dockerfile_appimage.in
│ ├── AppRun
│ ├── debian-dependencies.sh
│ ├── build-and-test-appimage.sh
│ ├── build-and-test-deb.sh
│ ├── deploy-deb.sh
│ └── deploy-appimage.sh
├── src
│ ├── update-i18n.sh
│ └── archive.sh
├── clean-build-and-package.bat
└── clean-build-and-package
├── bootstrap.sh
├── icons
├── sonic-lineup.rc
├── draw.png
├── exit.png
├── ffwd.png
├── help.png
├── info.png
├── mono.png
├── move.png
├── new.png
├── pane.png
├── redo.png
├── solo.png
├── text.png
├── undo.png
├── zoom.png
├── align.png
├── cross.png
├── faders.png
├── notes.png
├── rewind.png
├── select.png
├── stereo.png
├── values.png
├── align-on.png
├── colour3d.png
├── editcopy.png
├── editcut.png
├── editpaste.png
├── ffwd-end.png
├── fileclose.png
├── filenew.png
├── fileopen.png
├── filesave.png
├── instants.png
├── measure.png
├── navigate.png
├── playloop.png
├── playpause.png
├── sharpen.png
├── speaker.png
├── spectrum.png
├── sv-16x16.png
├── sv-22x22.png
├── sv-24x24.png
├── sv-32x32.png
├── sv-48x48.png
├── sv-64x64.png
├── svicon16.png
├── svicon32.png
├── timeruler.png
├── waveform.png
├── zoom-fit.png
├── zoom-in.png
├── zoom-out.png
├── annotation.png
├── draw-curve.png
├── editdelete.png
├── fader_knob.png
├── fader_leds.png
├── filenew-22.png
├── fileopen-22.png
├── filesave-22.png
├── filesaveas.png
├── melodogram.png
├── spectrogram.png
├── style
│ ├── frame.png
│ ├── arrow-up.png
│ ├── pagefold.png
│ ├── sizegrip.png
│ ├── spindown.png
│ ├── spinup.png
│ ├── tooltip.png
│ ├── up_arrow.png
│ ├── arrow-down.png
│ ├── arrow-left.png
│ ├── down_arrow.png
│ ├── spinup_off.png
│ ├── tab-close.png
│ ├── arrow-right.png
│ ├── spindown_off.png
│ ├── spinup_hover.png
│ ├── title-close.png
│ ├── title-undock.png
│ ├── arrow-up-small.png
│ ├── combo-dropdown.png
│ ├── golden-arrow-up.png
│ ├── spindown_hover.png
│ ├── spinup_pressed.png
│ ├── arrow-down-small.png
│ ├── arrow-left-small.png
│ ├── arrow-right-small.png
│ ├── arrow-up-inverted.png
│ ├── checkbox_checked.png
│ ├── checkbox_disabled.png
│ ├── checkbox_unchecked.png
│ ├── golden-arrow-left.png
│ ├── golden-arrow-right.png
│ ├── htoolbar-separator.png
│ ├── spindown_pressed.png
│ ├── tab-scroll-button.png
│ ├── up_arrow_disabled.png
│ ├── vtoolbar-separator.png
│ ├── arrow-left-inverted.png
│ ├── arrow-right-inverted.png
│ ├── connect-button-arrow.png
│ ├── down_arrow_disabled.png
│ ├── golden-arrow-left-up.png
│ ├── header-close-button.png
│ ├── messagebox-critical.png
│ ├── messagebox-question.png
│ ├── radiobutton_checked.png
│ ├── toolbar-horiz-pixmap.png
│ ├── toolbar-vert-pixmap.png
│ ├── arrow-up-small-inverted.png
│ ├── checkbox_checked_hover.png
│ ├── checkbox_indeterminate.png
│ ├── messagebox-information.png
│ ├── radiobutton_unchecked.png
│ ├── tab-scroll-button-hover.png
│ ├── arrow-down-small-inverted.png
│ ├── arrow-left-small-inverted.png
│ ├── checkbox_checked_disabled.png
│ ├── checkbox_checked_pressed.png
│ ├── checkbox_unchecked_hover.png
│ ├── radiobutton_checked_hover.png
│ ├── arrow-right-small-inverted.png
│ ├── checkbox_indeterminate_hover.png
│ ├── checkbox_unchecked_pressed.png
│ ├── radiobutton_checked_disabled.png
│ ├── radiobutton_checked_pressed.png
│ ├── radiobutton_unchecked_hover.png
│ ├── tab-scroll-button-disabled.png
│ ├── checkbox_indeterminate_pressed.png
│ ├── radiobutton_unchecked_disabled.png
│ ├── radiobutton_unchecked_pressed.png
│ ├── radiobutton_checked_hover_disabled.png
│ ├── radiobutton_checked_pressed_disabled.png
│ ├── radiobutton_unchecked_hover_disabled.png
│ └── radiobutton_unchecked_pressed_disabled.png
├── sv-128x128.png
├── sv-macicon.icns
├── sv-winicon.ico
├── fader_knob_red.png
├── fileopenaudio.png
├── filesaveas-22.png
├── playpause-orig.png
├── playselection.png
├── rewind-start.png
├── fader_background.png
├── fileopensession.png
├── qm-logo-smaller.png
├── playselectionloop.png
├── sonic-lineup-icon.icns
├── sonic-lineup-icon.ico
├── spectrogram-22x22.png
├── qm-logo-smaller-white.png
├── sonic-lineup-icon-16x16.png
├── sonic-lineup-icon-22x22.png
├── sonic-lineup-icon-24x24.png
├── sonic-lineup-icon-32x32.png
├── sonic-lineup-icon-48x48.png
├── sonic-lineup-icon-64x64.png
├── sonic-lineup-icon-128x128.png
├── README
├── measure1mask.xbm
├── measure2mask.xbm
├── measure1cursor.xbm
└── measure2cursor.xbm
├── i18n
├── vect_ru.qm
├── ru.lproj
│ └── InfoPlist.strings
├── vect_cs_CZ.qm
├── vect_en_GB.qm
├── vect_en_US.qm
├── cs.lproj
│ └── InfoPlist.strings
├── en.lproj
│ └── InfoPlist.strings
└── tips_en.xml
├── samples
├── bass.wav
├── beep.wav
├── clap.wav
├── kick.wav
├── tap.wav
├── bounce.wav
├── click.wav
├── cowbell.wav
├── hihat.wav
├── organ.wav
├── piano.wav
├── snare.wav
├── stick.wav
├── strike.wav
└── README
├── repoint.bat
├── repoint.pri
├── os-other.pro
├── sonic-lineup.desktop
├── os-win10.pro
├── config.pri.in
├── test-svcore-base.pro
├── test-svcore-system.pro
├── platform-dataquay.pri
├── test-svcore-data-fileio.pro
├── test-svcore-data-model.pro
├── main
├── IntroDialog.h
├── NetworkPermissionTester.h
├── SmallSession.h
├── PreferencesDialog.h
├── NetworkPermissionTester.cpp
├── SmallSession.cpp
├── IntroDialog.cpp
└── PreferencesDialog.cpp
├── .appveyor.yml
├── .hgtags
├── base.pri
├── azi.pro
├── .hgignore
├── vamp-plugin-sdk-files.pri
├── convert.pro
├── server.pro
├── nnls-chroma.pro
├── pyin.pro
├── sonic-lineup.pro
├── README.md
├── repoint-lock.json
├── .travis.yml
├── capnp-regen.pri
├── bq-files.pri
├── base.pro
├── tuning-difference.pro
├── match.pro
├── CHANGELOG
├── vectapp.pro
├── repoint.ps1
├── repoint-project.json
├── noconfig.pri
├── repoint
├── vect-mac.qss
└── configure.ac
/version.h:
--------------------------------------------------------------------------------
1 | #define VECT_VERSION "1.1"
2 |
--------------------------------------------------------------------------------
/pitch-track-align/main.sml:
--------------------------------------------------------------------------------
1 | val _ = main ()
2 |
--------------------------------------------------------------------------------
/deploy/osx/qt.conf:
--------------------------------------------------------------------------------
1 | [Paths]
2 | Plugins = plugins
3 |
--------------------------------------------------------------------------------
/bootstrap.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | aclocal -I . && autoconf
3 |
--------------------------------------------------------------------------------
/icons/sonic-lineup.rc:
--------------------------------------------------------------------------------
1 | IDI_ICON1 ICON DISCARDABLE "sonic-lineup-icon.ico"
2 |
--------------------------------------------------------------------------------
/icons/draw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/draw.png
--------------------------------------------------------------------------------
/icons/exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/exit.png
--------------------------------------------------------------------------------
/icons/ffwd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/ffwd.png
--------------------------------------------------------------------------------
/icons/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/help.png
--------------------------------------------------------------------------------
/icons/info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/info.png
--------------------------------------------------------------------------------
/icons/mono.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/mono.png
--------------------------------------------------------------------------------
/icons/move.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/move.png
--------------------------------------------------------------------------------
/icons/new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/new.png
--------------------------------------------------------------------------------
/icons/pane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/pane.png
--------------------------------------------------------------------------------
/icons/redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/redo.png
--------------------------------------------------------------------------------
/icons/solo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/solo.png
--------------------------------------------------------------------------------
/icons/text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/text.png
--------------------------------------------------------------------------------
/icons/undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/undo.png
--------------------------------------------------------------------------------
/icons/zoom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/zoom.png
--------------------------------------------------------------------------------
/i18n/vect_ru.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/i18n/vect_ru.qm
--------------------------------------------------------------------------------
/icons/align.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/align.png
--------------------------------------------------------------------------------
/icons/cross.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/cross.png
--------------------------------------------------------------------------------
/icons/faders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/faders.png
--------------------------------------------------------------------------------
/icons/notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/notes.png
--------------------------------------------------------------------------------
/icons/rewind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/rewind.png
--------------------------------------------------------------------------------
/icons/select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/select.png
--------------------------------------------------------------------------------
/icons/stereo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/stereo.png
--------------------------------------------------------------------------------
/icons/values.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/values.png
--------------------------------------------------------------------------------
/samples/bass.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/bass.wav
--------------------------------------------------------------------------------
/samples/beep.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/beep.wav
--------------------------------------------------------------------------------
/samples/clap.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/clap.wav
--------------------------------------------------------------------------------
/samples/kick.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/kick.wav
--------------------------------------------------------------------------------
/samples/tap.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/tap.wav
--------------------------------------------------------------------------------
/i18n/ru.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | NSMicrophoneUsageDescription = "Это необходимо для записи звука.";
2 |
--------------------------------------------------------------------------------
/i18n/vect_cs_CZ.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/i18n/vect_cs_CZ.qm
--------------------------------------------------------------------------------
/i18n/vect_en_GB.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/i18n/vect_en_GB.qm
--------------------------------------------------------------------------------
/i18n/vect_en_US.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/i18n/vect_en_US.qm
--------------------------------------------------------------------------------
/icons/align-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/align-on.png
--------------------------------------------------------------------------------
/icons/colour3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/colour3d.png
--------------------------------------------------------------------------------
/icons/editcopy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/editcopy.png
--------------------------------------------------------------------------------
/icons/editcut.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/editcut.png
--------------------------------------------------------------------------------
/icons/editpaste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/editpaste.png
--------------------------------------------------------------------------------
/icons/ffwd-end.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/ffwd-end.png
--------------------------------------------------------------------------------
/icons/fileclose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fileclose.png
--------------------------------------------------------------------------------
/icons/filenew.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/filenew.png
--------------------------------------------------------------------------------
/icons/fileopen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fileopen.png
--------------------------------------------------------------------------------
/icons/filesave.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/filesave.png
--------------------------------------------------------------------------------
/icons/instants.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/instants.png
--------------------------------------------------------------------------------
/icons/measure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/measure.png
--------------------------------------------------------------------------------
/icons/navigate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/navigate.png
--------------------------------------------------------------------------------
/icons/playloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/playloop.png
--------------------------------------------------------------------------------
/icons/playpause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/playpause.png
--------------------------------------------------------------------------------
/icons/sharpen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sharpen.png
--------------------------------------------------------------------------------
/icons/speaker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/speaker.png
--------------------------------------------------------------------------------
/icons/spectrum.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/spectrum.png
--------------------------------------------------------------------------------
/icons/sv-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-16x16.png
--------------------------------------------------------------------------------
/icons/sv-22x22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-22x22.png
--------------------------------------------------------------------------------
/icons/sv-24x24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-24x24.png
--------------------------------------------------------------------------------
/icons/sv-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-32x32.png
--------------------------------------------------------------------------------
/icons/sv-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-48x48.png
--------------------------------------------------------------------------------
/icons/sv-64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-64x64.png
--------------------------------------------------------------------------------
/icons/svicon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/svicon16.png
--------------------------------------------------------------------------------
/icons/svicon32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/svicon32.png
--------------------------------------------------------------------------------
/icons/timeruler.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/timeruler.png
--------------------------------------------------------------------------------
/icons/waveform.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/waveform.png
--------------------------------------------------------------------------------
/icons/zoom-fit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/zoom-fit.png
--------------------------------------------------------------------------------
/icons/zoom-in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/zoom-in.png
--------------------------------------------------------------------------------
/icons/zoom-out.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/zoom-out.png
--------------------------------------------------------------------------------
/samples/bounce.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/bounce.wav
--------------------------------------------------------------------------------
/samples/click.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/click.wav
--------------------------------------------------------------------------------
/samples/cowbell.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/cowbell.wav
--------------------------------------------------------------------------------
/samples/hihat.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/hihat.wav
--------------------------------------------------------------------------------
/samples/organ.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/organ.wav
--------------------------------------------------------------------------------
/samples/piano.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/piano.wav
--------------------------------------------------------------------------------
/samples/snare.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/snare.wav
--------------------------------------------------------------------------------
/samples/stick.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/stick.wav
--------------------------------------------------------------------------------
/samples/strike.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/samples/strike.wav
--------------------------------------------------------------------------------
/deploy/win64/main.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/deploy/win64/main.bmp
--------------------------------------------------------------------------------
/deploy/win64/top.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/deploy/win64/top.bmp
--------------------------------------------------------------------------------
/icons/annotation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/annotation.png
--------------------------------------------------------------------------------
/icons/draw-curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/draw-curve.png
--------------------------------------------------------------------------------
/icons/editdelete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/editdelete.png
--------------------------------------------------------------------------------
/icons/fader_knob.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fader_knob.png
--------------------------------------------------------------------------------
/icons/fader_leds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fader_leds.png
--------------------------------------------------------------------------------
/icons/filenew-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/filenew-22.png
--------------------------------------------------------------------------------
/icons/fileopen-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fileopen-22.png
--------------------------------------------------------------------------------
/icons/filesave-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/filesave-22.png
--------------------------------------------------------------------------------
/icons/filesaveas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/filesaveas.png
--------------------------------------------------------------------------------
/icons/melodogram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/melodogram.png
--------------------------------------------------------------------------------
/icons/spectrogram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/spectrogram.png
--------------------------------------------------------------------------------
/icons/style/frame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/frame.png
--------------------------------------------------------------------------------
/icons/sv-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-128x128.png
--------------------------------------------------------------------------------
/icons/sv-macicon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-macicon.icns
--------------------------------------------------------------------------------
/icons/sv-winicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sv-winicon.ico
--------------------------------------------------------------------------------
/icons/fader_knob_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fader_knob_red.png
--------------------------------------------------------------------------------
/icons/fileopenaudio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fileopenaudio.png
--------------------------------------------------------------------------------
/icons/filesaveas-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/filesaveas-22.png
--------------------------------------------------------------------------------
/icons/playpause-orig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/playpause-orig.png
--------------------------------------------------------------------------------
/icons/playselection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/playselection.png
--------------------------------------------------------------------------------
/icons/rewind-start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/rewind-start.png
--------------------------------------------------------------------------------
/icons/style/arrow-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-up.png
--------------------------------------------------------------------------------
/icons/style/pagefold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/pagefold.png
--------------------------------------------------------------------------------
/icons/style/sizegrip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/sizegrip.png
--------------------------------------------------------------------------------
/icons/style/spindown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spindown.png
--------------------------------------------------------------------------------
/icons/style/spinup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spinup.png
--------------------------------------------------------------------------------
/icons/style/tooltip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/tooltip.png
--------------------------------------------------------------------------------
/icons/style/up_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/up_arrow.png
--------------------------------------------------------------------------------
/pitch-track-align/pitch-track-align.mlb:
--------------------------------------------------------------------------------
1 | $(SML_LIB)/basis/basis.mlb
2 | pitch-track-align.sml
3 | main.sml
4 |
--------------------------------------------------------------------------------
/repoint.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%~dpn0.ps1' %*";
3 |
4 |
--------------------------------------------------------------------------------
/icons/fader_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fader_background.png
--------------------------------------------------------------------------------
/icons/fileopensession.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/fileopensession.png
--------------------------------------------------------------------------------
/icons/qm-logo-smaller.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/qm-logo-smaller.png
--------------------------------------------------------------------------------
/icons/style/arrow-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-down.png
--------------------------------------------------------------------------------
/icons/style/arrow-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-left.png
--------------------------------------------------------------------------------
/icons/style/down_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/down_arrow.png
--------------------------------------------------------------------------------
/icons/style/spinup_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spinup_off.png
--------------------------------------------------------------------------------
/icons/style/tab-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/tab-close.png
--------------------------------------------------------------------------------
/i18n/cs.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | NSMicrophoneUsageDescription = "Sonic Lineup potřebuje pro nahrávání použít mikrofon.";
2 |
--------------------------------------------------------------------------------
/icons/playselectionloop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/playselectionloop.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon.icns
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon.ico
--------------------------------------------------------------------------------
/icons/spectrogram-22x22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/spectrogram-22x22.png
--------------------------------------------------------------------------------
/icons/style/arrow-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-right.png
--------------------------------------------------------------------------------
/icons/style/spindown_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spindown_off.png
--------------------------------------------------------------------------------
/icons/style/spinup_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spinup_hover.png
--------------------------------------------------------------------------------
/icons/style/title-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/title-close.png
--------------------------------------------------------------------------------
/icons/style/title-undock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/title-undock.png
--------------------------------------------------------------------------------
/deploy/linux/deb-skeleton/usr/lib/sonic-lineup/README:
--------------------------------------------------------------------------------
1 | Vamp audio analysis plugins for use by the Sonic Lineup application.
2 |
--------------------------------------------------------------------------------
/i18n/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | NSMicrophoneUsageDescription = "Sonic Lineup needs to use the microphone for recording.";
2 |
--------------------------------------------------------------------------------
/icons/qm-logo-smaller-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/qm-logo-smaller-white.png
--------------------------------------------------------------------------------
/icons/style/arrow-up-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-up-small.png
--------------------------------------------------------------------------------
/icons/style/combo-dropdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/combo-dropdown.png
--------------------------------------------------------------------------------
/icons/style/golden-arrow-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/golden-arrow-up.png
--------------------------------------------------------------------------------
/icons/style/spindown_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spindown_hover.png
--------------------------------------------------------------------------------
/icons/style/spinup_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spinup_pressed.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-16x16.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-22x22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-22x22.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-24x24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-24x24.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-32x32.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-48x48.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-64x64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-64x64.png
--------------------------------------------------------------------------------
/icons/style/arrow-down-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-down-small.png
--------------------------------------------------------------------------------
/icons/style/arrow-left-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-left-small.png
--------------------------------------------------------------------------------
/icons/style/arrow-right-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-right-small.png
--------------------------------------------------------------------------------
/icons/style/arrow-up-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-up-inverted.png
--------------------------------------------------------------------------------
/icons/style/checkbox_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_checked.png
--------------------------------------------------------------------------------
/icons/style/checkbox_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_disabled.png
--------------------------------------------------------------------------------
/icons/style/checkbox_unchecked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_unchecked.png
--------------------------------------------------------------------------------
/icons/style/golden-arrow-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/golden-arrow-left.png
--------------------------------------------------------------------------------
/icons/style/golden-arrow-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/golden-arrow-right.png
--------------------------------------------------------------------------------
/icons/style/htoolbar-separator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/htoolbar-separator.png
--------------------------------------------------------------------------------
/icons/style/spindown_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/spindown_pressed.png
--------------------------------------------------------------------------------
/icons/style/tab-scroll-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/tab-scroll-button.png
--------------------------------------------------------------------------------
/icons/style/up_arrow_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/up_arrow_disabled.png
--------------------------------------------------------------------------------
/icons/style/vtoolbar-separator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/vtoolbar-separator.png
--------------------------------------------------------------------------------
/icons/sonic-lineup-icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/sonic-lineup-icon-128x128.png
--------------------------------------------------------------------------------
/icons/style/arrow-left-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-left-inverted.png
--------------------------------------------------------------------------------
/icons/style/arrow-right-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-right-inverted.png
--------------------------------------------------------------------------------
/icons/style/connect-button-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/connect-button-arrow.png
--------------------------------------------------------------------------------
/icons/style/down_arrow_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/down_arrow_disabled.png
--------------------------------------------------------------------------------
/icons/style/golden-arrow-left-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/golden-arrow-left-up.png
--------------------------------------------------------------------------------
/icons/style/header-close-button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/header-close-button.png
--------------------------------------------------------------------------------
/icons/style/messagebox-critical.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/messagebox-critical.png
--------------------------------------------------------------------------------
/icons/style/messagebox-question.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/messagebox-question.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_checked.png
--------------------------------------------------------------------------------
/icons/style/toolbar-horiz-pixmap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/toolbar-horiz-pixmap.png
--------------------------------------------------------------------------------
/icons/style/toolbar-vert-pixmap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/toolbar-vert-pixmap.png
--------------------------------------------------------------------------------
/icons/style/arrow-up-small-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-up-small-inverted.png
--------------------------------------------------------------------------------
/icons/style/checkbox_checked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_checked_hover.png
--------------------------------------------------------------------------------
/icons/style/checkbox_indeterminate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_indeterminate.png
--------------------------------------------------------------------------------
/icons/style/messagebox-information.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/messagebox-information.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_unchecked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_unchecked.png
--------------------------------------------------------------------------------
/icons/style/tab-scroll-button-hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/tab-scroll-button-hover.png
--------------------------------------------------------------------------------
/samples/README:
--------------------------------------------------------------------------------
1 | Samples from standard Hydrogen drum machine kits, except for piano.wav
2 | (ancestry unknown) and click.wav (random noise).
3 |
--------------------------------------------------------------------------------
/icons/style/arrow-down-small-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-down-small-inverted.png
--------------------------------------------------------------------------------
/icons/style/arrow-left-small-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-left-small-inverted.png
--------------------------------------------------------------------------------
/icons/style/checkbox_checked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_checked_disabled.png
--------------------------------------------------------------------------------
/icons/style/checkbox_checked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_checked_pressed.png
--------------------------------------------------------------------------------
/icons/style/checkbox_unchecked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_unchecked_hover.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_checked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_checked_hover.png
--------------------------------------------------------------------------------
/icons/style/arrow-right-small-inverted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/arrow-right-small-inverted.png
--------------------------------------------------------------------------------
/icons/style/checkbox_indeterminate_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_indeterminate_hover.png
--------------------------------------------------------------------------------
/icons/style/checkbox_unchecked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_unchecked_pressed.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_checked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_checked_disabled.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_checked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_checked_pressed.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_unchecked_hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_unchecked_hover.png
--------------------------------------------------------------------------------
/icons/style/tab-scroll-button-disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/tab-scroll-button-disabled.png
--------------------------------------------------------------------------------
/icons/style/checkbox_indeterminate_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/checkbox_indeterminate_pressed.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_unchecked_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_unchecked_disabled.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_unchecked_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_unchecked_pressed.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_checked_hover_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_checked_hover_disabled.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_checked_pressed_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_checked_pressed_disabled.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_unchecked_hover_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_unchecked_hover_disabled.png
--------------------------------------------------------------------------------
/icons/style/radiobutton_unchecked_pressed_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/icons/style/radiobutton_unchecked_pressed_disabled.png
--------------------------------------------------------------------------------
/deploy/linux/deb-skeleton/usr/share/doc/sonic-lineup/changelog.Debian.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sonic-visualiser/sonic-lineup/HEAD/deploy/linux/deb-skeleton/usr/share/doc/sonic-lineup/changelog.Debian.gz
--------------------------------------------------------------------------------
/icons/README:
--------------------------------------------------------------------------------
1 | Icons are from various GPL'd sources, including the GIMP image editor,
2 | KDE crystalsvg icon set, Rosegarden audio and MIDI sequencer, and Hydrogen
3 | drum machine. Some modifications and new drawings by Chris Cannam.
4 |
--------------------------------------------------------------------------------
/repoint.pri:
--------------------------------------------------------------------------------
1 |
2 | repoint.target = $$PWD/.repoint.point
3 | repoint.depends = $$PWD/repoint-project.json $$PWD/repoint-lock.json
4 | repoint.commands = $$PWD/repoint install --directory $$PWD
5 |
6 | QMAKE_EXTRA_TARGETS += repoint
7 | PRE_TARGETDEPS += $$repoint.target
8 |
--------------------------------------------------------------------------------
/deploy/osx/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | com.apple.security.app-sandbox
5 |
6 | com.apple.security.device.audio-input
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/pitch-track-align/Makefile:
--------------------------------------------------------------------------------
1 |
2 | SCRIPTS := ../../sml-buildscripts
3 |
4 | pitch-track-align: pitch-track-align.mlb pitch-track-align.deps
5 | mlton pitch-track-align.mlb
6 |
7 | pitch-track-align.deps: pitch-track-align.mlb
8 | ${SCRIPTS}/mlb-dependencies $^ > $@
9 |
10 | clean:
11 | rm -f pitch-track-align *.deps
12 |
13 | -include *.deps
14 |
--------------------------------------------------------------------------------
/pitch-track-align/note-track.ttl:
--------------------------------------------------------------------------------
1 | @prefix xsd: .
2 | @prefix vamp: .
3 | @prefix : <#> .
4 |
5 | :transform a vamp:Transform ;
6 | vamp:plugin ;
7 | vamp:output .
8 |
--------------------------------------------------------------------------------
/deploy/win64/README-Vamp.txt:
--------------------------------------------------------------------------------
1 |
2 | To add 64-bit Vamp audio analysis plugins to the Transform menu in
3 | Sonic Visualiser, unpack and copy them into this directory.
4 |
5 | (For 32-bit plugins, put them in "C:\Program Files (x86)\Vamp Plugins"
6 | instead, or the equivalent in your local language edition of Windows.)
7 |
8 | See http://vamp-plugins.org/ for more information.
9 |
--------------------------------------------------------------------------------
/os-other.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = lib
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | CONFIG -= qt
13 | CONFIG += plugin no_plugin_name_prefix release warn_on
14 |
15 | TARGET = os_other
16 |
17 | OBJECTS_DIR = o
18 |
19 | win32-msvc* {
20 | LIBS += -EXPORT:OSReportsDarkThemeActive -EXPORT:OSQueryAccentColour
21 | }
22 |
23 | SOURCES += \
24 | svcore/system/os-other.cpp
25 |
26 |
--------------------------------------------------------------------------------
/sonic-lineup.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=Sonic Lineup
3 | Comment=Comparative visualisation of multiple audio files of related content
4 | Exec=sonic-lineup %U
5 | Keywords=audio; sound; visualiser; sonic;
6 | Terminal=false
7 | Type=Application
8 | Icon=sonic-lineup-icon
9 | Categories=Audio;AudioVideo;
10 | MimeType=application/x-ogg;audio/mp3;audio/ogg;audio/mpeg;audio/mpegurl;audio/x-flac;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-wav;audio/wav;application/ogg;audio/x-vorbis+ogg;
11 |
--------------------------------------------------------------------------------
/deploy/linux/fix-lintian-bits.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | dir=$1
4 |
5 | [ -d "$dir" ] || exit 1
6 |
7 | set -eu
8 |
9 | strip "$dir"/usr/bin/*
10 | strip "$dir"/usr/lib/*/*.so
11 | strip "$dir"/usr/lib/*/vamp-plugin-load-checker
12 |
13 | sz=`du -sx --exclude DEBIAN "$dir" | awk '{ print $1; }'`
14 | perl -i -p -e "s/Installed-Size: .*/Installed-Size: $sz/" "$dir"/DEBIAN/control
15 |
16 | find "$dir" -name \*~ -exec rm \{\} \;
17 |
18 | chown -R root.root "$dir"/*
19 |
20 | chmod -R g-w "$dir"/*
21 |
--------------------------------------------------------------------------------
/os-win10.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = lib
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | CONFIG -= qt
13 | CONFIG += plugin no_plugin_name_prefix release warn_on
14 |
15 | TARGET = os
16 |
17 | OBJECTS_DIR = o
18 |
19 | win32-msvc* {
20 | LIBS += -EXPORT:OSReportsDarkThemeActive -EXPORT:OSQueryAccentColour
21 | LIBS += -lWindowsApp
22 | }
23 |
24 | SOURCES += \
25 | svcore/system/os-win10.cpp
26 |
27 |
--------------------------------------------------------------------------------
/pitch-track-align/pitch-track.ttl:
--------------------------------------------------------------------------------
1 | @prefix xsd: .
2 | @prefix vamp: .
3 | @prefix : <#> .
4 |
5 | :transform a vamp:Transform ;
6 | vamp:plugin ;
7 | vamp:parameter_binding [
8 | vamp:parameter [ vamp:identifier "outputunvoiced" ] ;
9 | vamp:value "2"^^xsd:float ;
10 | ] ;
11 | vamp:output .
12 |
--------------------------------------------------------------------------------
/deploy/linux/deb-skeleton/usr/share/applications/sonic-lineup.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=Sonic Lineup
3 | Comment=Comparative visualisation of multiple audio files of related content
4 | Exec=sonic-lineup %U
5 | Keywords=audio; sound; visualiser; sonic;
6 | Terminal=false
7 | Type=Application
8 | Icon=sonic-lineup-icon
9 | Categories=Audio;AudioVideo;
10 | MimeType=application/x-ogg;audio/mp3;audio/ogg;audio/mpeg;audio/mpegurl;audio/x-flac;audio/x-mp3;audio/x-mpeg;audio/x-mpegurl;audio/x-wav;audio/wav;application/ogg;audio/x-vorbis+ogg;
11 |
--------------------------------------------------------------------------------
/deploy/linux/docker/Dockerfile_test_deb.in:
--------------------------------------------------------------------------------
1 | FROM ubuntu:18.04
2 |
3 | # Ensure that everything subsequent is re-run when a new revision is
4 | # being built (rather than being cached) - so as to avoid potential
5 | # mismatches between results of apt-get update and the package
6 | # dependency installation itself
7 | RUN echo [[REVISION]]
8 |
9 | RUN apt-get update
10 | ADD output/sonic-lineup_[[RELEASE]]_amd64.deb sonic-lineup_[[RELEASE]]_amd64.deb
11 | RUN apt install -y ./sonic-lineup_[[RELEASE]]_amd64.deb
12 | RUN /usr/bin/sonic-lineup --version
13 |
14 |
--------------------------------------------------------------------------------
/deploy/src/update-i18n.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | LUPDATE="lupdate"
4 | LRELEASE="lrelease"
5 |
6 | if lupdate-qt5 -version >/dev/null 2>&1; then
7 | LUPDATE="lupdate-qt5"
8 | LRELEASE="lrelease-qt5"
9 | fi
10 |
11 | LANGUAGES="ru en_GB en_US cs_CZ"
12 |
13 | for LANG in $LANGUAGES; do
14 | $LUPDATE \
15 | svcore/*/*.h svcore/*/*.cpp \
16 | svcore/*/*/*.h svcore/*/*/*.cpp \
17 | svgui/*/*.h svgui/*/*.cpp \
18 | svapp/*/*.h svapp/*/*.cpp \
19 | */*.h */*.cpp \
20 | -ts i18n/vect_$LANG.ts
21 | done
22 |
23 | for LANG in $LANGUAGES; do
24 | $LRELEASE i18n/vect_$LANG.ts
25 | done
26 |
27 |
--------------------------------------------------------------------------------
/deploy/linux/docker/Dockerfile_test_appimage.in:
--------------------------------------------------------------------------------
1 | FROM centos:7
2 |
3 | # Ensure that everything subsequent is re-run when a new revision is
4 | # being built (rather than being cached) - so as to avoid potential
5 | # mismatches between results of yum update and the package dependency
6 | # installation itself
7 | RUN echo [[REVISION]]
8 |
9 | RUN yum -y update
10 | RUN yum -y groupinstall "X Window System"
11 | RUN yum -y install wget
12 | ADD output/SonicLineup-[[REVISION]]-x86_64.AppImage SL.AppImage
13 | RUN chmod +x SL.AppImage
14 | RUN ./SL.AppImage --appimage-extract
15 | RUN ./squashfs-root/AppRun --version
16 |
--------------------------------------------------------------------------------
/config.pri.in:
--------------------------------------------------------------------------------
1 |
2 | CONFIG += @QMAKE_CONFIG@
3 |
4 | PREFIX_PATH = @prefix@
5 |
6 | DEFINES += @HAVES@
7 |
8 | QMAKE_CC = @CC@
9 | QMAKE_CXX = @CXX@
10 | QMAKE_LINK = @CXX@
11 |
12 | QMAKE_CFLAGS += @CFLAGS@
13 | QMAKE_CXXFLAGS += @CXXFLAGS@
14 | QMAKE_LFLAGS += @LDFLAGS@
15 |
16 | CONFIG += @CXXSTANDARD@
17 |
18 | linux*:LIBS += -L$$PWD -lbase -lasound -ldl
19 |
20 | macx*:DEFINES += HAVE_COREAUDIO
21 | macx*:LIBS += -framework CoreAudio -framework CoreMidi -framework AudioUnit -framework AudioToolbox -framework CoreFoundation -framework CoreServices
22 |
23 | LIBS += @LIBS@
24 |
25 | linux*:LIBS -= -ljack
26 |
27 | DEFINES += HAVE_PIPER HAVE_PLUGIN_CHECKER_HELPER DYNAMIC_JACK
28 |
29 |
--------------------------------------------------------------------------------
/deploy/clean-build-and-package.bat:
--------------------------------------------------------------------------------
1 | @rem Run this from within the top-level dir: deploy\clean-build-and-package
2 | @echo on
3 |
4 | @set /p VERSION=
4 | Architecture: amd64
5 | Version: 1.0cc-1
6 | Installed-Size: 6056
7 | Section: contrib/sound
8 | Depends: libqt5core5a, libsndfile1, libsamplerate0, libfftw3-3, libbz2-1.0, libpulse0, libmad0, libid3tag0, liboggz2, libfishsound1, libasound2, liblo7, liblrdf0, libsord-0-0, libserd-0-0, vamp-plugin-sdk, librubberband2, libc6
9 | Description: Comparative visualisation of related audio recordings
10 | Sonic Lineup is an application for quick read-only comparative
11 | visualisation of multiple audio files whose contents consist of
12 | different performances of the same work or recordings of the same
13 | material.
14 |
--------------------------------------------------------------------------------
/test-svcore-data-fileio.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = app
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | include(base.pri)
13 |
14 | CONFIG += console
15 | QT += network xml testlib
16 | QT -= gui
17 |
18 | win32-x-g++:QMAKE_LFLAGS += -Wl,-subsystem,console
19 | macx*: CONFIG -= app_bundle
20 |
21 | TARGET = test-svcore-data-fileio
22 |
23 | OBJECTS_DIR = o
24 | MOC_DIR = o
25 |
26 | include(svcore/data/fileio/test/files.pri)
27 |
28 | for (file, TEST_SOURCES) { SOURCES += $$sprintf("svcore/data/fileio/test/%1", $$file) }
29 | for (file, TEST_HEADERS) { HEADERS += $$sprintf("svcore/data/fileio/test/%1", $$file) }
30 |
31 | !win32* {
32 | QMAKE_POST_LINK = ./$${TARGET}
33 | }
34 |
--------------------------------------------------------------------------------
/test-svcore-data-model.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = app
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | include(base.pri)
13 |
14 | CONFIG += console
15 | QT += network xml testlib
16 | QT -= gui
17 |
18 | win32-x-g++:QMAKE_LFLAGS += -Wl,-subsystem,console
19 | macx*: CONFIG -= app_bundle
20 |
21 | TARGET = test-svcore-data-model
22 |
23 | OBJECTS_DIR = o
24 | MOC_DIR = o
25 |
26 | include(svcore/data/model/test/files.pri)
27 |
28 | for (file, TEST_SOURCES) { SOURCES += $$sprintf("svcore/data/model/test/%1", $$file) }
29 | for (file, TEST_HEADERS) { HEADERS += $$sprintf("svcore/data/model/test/%1", $$file) }
30 |
31 | !win32* {
32 | QMAKE_POST_LINK = ./$${TARGET}
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/deploy/linux/AppRun:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | mydir=$(dirname "$0")
4 | case "$mydir" in
5 | /*) ;;
6 | *) mydir="$PWD/$mydir";;
7 | esac
8 |
9 | echo "AppImage root is $mydir"
10 |
11 | PATH="$mydir/usr/bin:$mydir/bin:$PATH"
12 | export PATH
13 |
14 | LD_LIBRARY_PATH="$mydir/usr/lib:$mydir/usr/lib/x86_64-linux-gnu:$mydir/usr/lib64:$LD_LIBRARY_PATH"
15 | export LD_LIBRARY_PATH
16 |
17 | QT_PLUGIN_PATH="$mydir/usr/lib/qt5/plugins/:$mydir/usr/lib/x86_64-linux-gnu/qt5/plugins/:$mydir/usr/lib64/qt5/plugins/:$QT_PLUGIN_PATH"
18 | export QT_PLUGIN_PATH
19 |
20 | XDG_DATA_DIRS="$mydir/usr/share:$XDG_DATA_DIRS:/usr/local/share:/usr/share"
21 | export XDG_DATA_DIRS
22 |
23 | GSETTINGS_SCHEMA_DIR="$mydir/usr/share/glib-2.0/schemas:$GSETTINGS_SCHEMA_DIR"
24 | export GSETTINGS_SCHEMA_DIR
25 |
26 | exec "$mydir/usr/bin/sonic-lineup" "$@"
27 |
--------------------------------------------------------------------------------
/main/IntroDialog.h:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #ifndef INTRO_DIALOG_H
16 | #define INTRO_DIALOG_H
17 |
18 | class QWidget;
19 |
20 | class IntroDialog
21 | {
22 | public:
23 | static void show(QWidget *parent);
24 | };
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/.appveyor.yml:
--------------------------------------------------------------------------------
1 |
2 | image:
3 | - Visual Studio 2019
4 |
5 | configuration:
6 | - Release
7 |
8 | install:
9 | - cinst --allow-empty-checksums smlnj
10 | - cinst hg
11 | - ps: '"[hostfingerprints]" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
12 | - ps: '"code.soundsoftware.ac.uk = C7:27:7E:2C:1E:67:62:90:E9:8D:27:52:66:30:E6:FE:D4:2C:C5:30" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
13 | - ps: '"[hostsecurity]" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
14 | - ps: '"code.soundsoftware.ac.uk = code.soundsoftware.ac.uk:fingerprints=sha256:AF:67:D8:D6:D8:2F:28:FF:B9:1A:4D:CD:6A:93:25:EC:9E:47:9E:0E:E7:F1:FD:0B:97:B4:7C:D5:FA:2E:10:73" | Out-File -Encoding "ASCII" -Append $env:USERPROFILE\mercurial.ini'
15 |
16 | build_script:
17 | - deploy\win64\build-and-package.bat
18 |
19 |
--------------------------------------------------------------------------------
/.hgtags:
--------------------------------------------------------------------------------
1 | 774bee68e2f6628f829f91d2dd3c48d06ab23a84 vect_v0.1
2 | 71af1eb6373616946febc5f665631822bb0acfb8 v0.3
3 | 58e6f7617ded27d8e2b4a8526426b1336706fd7d v1.0pre1
4 | ab524fe04e4bfcba514dbd9dfb19b4a2670ce8f9 v1.0pre2
5 | 12e6150693cf50a542294f30d98609f8af10864e v1.0
6 | 12e6150693cf50a542294f30d98609f8af10864e v1.0
7 | 6af644edd243d14bb66c7bf9b11b4f9217dfbeef v1.0
8 | 6af644edd243d14bb66c7bf9b11b4f9217dfbeef v1.0
9 | d91be8a0a8a24dcadfd9586b15a7558ba0238001 v1.0
10 | c98dd2134981737db7d53c64c374c3f8716a9fb9 v1.0.1
11 | db3c5c831ca025f2b9f8780d32a5a25f1ff8f3a8 v1.1pre2
12 | 1778edddeb0a7446ada7a191e6c5ce8062ca3be0 v1.1pre3
13 | caa3ccad1c38d5e0b7619d0a93448117dc12457b v1.1pre4
14 | 1039347779f6f3ecd4b11b4d1e14b557dbc78dd3 v1.1pre5
15 | faf7ca23e3edbc958f0bcfcdfa0aea1513bd4201 v1.1pre6
16 | e7d373cd97a24163711526a99cf4b09ecff7564d v1.1pre7
17 | 68f74e5042e5b24511de6ba4dbc8e20776cbe15b v1.1
18 |
--------------------------------------------------------------------------------
/main/NetworkPermissionTester.h:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #ifndef NETWORK_PERMISSION_TESTER_H
16 | #define NETWORK_PERMISSION_TESTER_H
17 |
18 | class NetworkPermissionTester
19 | {
20 | public:
21 | NetworkPermissionTester() { }
22 | bool havePermission();
23 | };
24 |
25 | #endif
26 |
27 |
28 |
--------------------------------------------------------------------------------
/base.pri:
--------------------------------------------------------------------------------
1 |
2 | SV_INCLUDEPATH = \
3 | . \
4 | bqvec \
5 | bqvec/bqvec \
6 | bqfft \
7 | bqresample \
8 | bqaudioio \
9 | bqaudioio/bqaudioio \
10 | bqaudiostream \
11 | bqaudiostream/bqaudiostream \
12 | bqthingfactory \
13 | piper-vamp-cpp \
14 | checker \
15 | checker/checker \
16 | dataquay \
17 | dataquay/dataquay \
18 | svcore \
19 | svcore/data \
20 | svcore/plugin/api/alsa \
21 | svgui \
22 | svapp \
23 | vamp-plugin-sdk
24 |
25 | DEPENDPATH += $$SV_INCLUDEPATH
26 | INCLUDEPATH += $$SV_INCLUDEPATH
27 |
28 | # Platform defines for RtMidi
29 | linux*: DEFINES += __LINUX_ALSASEQ__ __LINUX_ALSA__
30 | macx*: DEFINES += __MACOSX_CORE__
31 | win*: DEFINES += __WINDOWS_MM__
32 | solaris*: DEFINES += __RTMIDI_DUMMY_ONLY__
33 |
34 | DEFINES += QT_DEPRECATED_WARNINGS_SINCE=0x050A00
35 |
36 | # Defines for Dataquay
37 | DEFINES += USE_SORD
38 |
39 | CONFIG += qt thread warn_on stl rtti exceptions
40 |
--------------------------------------------------------------------------------
/icons/measure1mask.xbm:
--------------------------------------------------------------------------------
1 | #define measure1mask_width 32
2 | #define measure1mask_height 32
3 | static unsigned char measure1mask_bits[] = {
4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00,
6 | 0x00, 0xe0, 0x01, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x00,
7 | 0x00, 0xfc, 0x01, 0x00, 0x00, 0xde, 0x01, 0x00, 0x00, 0xcf, 0x01, 0x00,
8 | 0x80, 0xc7, 0x01, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00,
9 | 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
15 |
--------------------------------------------------------------------------------
/icons/measure2mask.xbm:
--------------------------------------------------------------------------------
1 | #define measure2mask_width 32
2 | #define measure2mask_height 32
3 | static unsigned char measure2mask_bits[] = {
4 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
5 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfc, 0x07,
10 | 0x00, 0x00, 0xfc, 0x07, 0x00, 0x80, 0xe3, 0x01, 0x00, 0x80, 0xf3, 0x00,
11 | 0x00, 0x80, 0x7b, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x1f, 0x00,
12 | 0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x03, 0x00,
13 | 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
15 |
--------------------------------------------------------------------------------
/deploy/osx/sign.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eu
4 |
5 | # Execute this from the top-level directory of the project (the one
6 | # that contains the .app bundle). Supply the name of the .app bundle
7 | # as argument
8 | dir="$1"
9 | if [ -z "$dir" ] || [ ! -d "$dir" ]; then
10 | echo "Usage: $0 "
11 | echo "Where pkgdir is the directory containing .app"
12 | echo "All .app bundles in pkgdir will be signed"
13 | exit 2
14 | fi
15 |
16 | entitlements=deploy/osx/Entitlements.plist
17 |
18 | for app in "$dir"/*.app; do
19 | find "$app" -name \*.dylib -print | while read fr; do
20 | codesign -s "Developer ID Application: Chris Cannam" -fv --deep --options runtime "$fr"
21 | done
22 | codesign -s "Developer ID Application: Chris Cannam" -fv --deep --options runtime --entitlements "$entitlements" "$app/Contents/MacOS/Sonic Lineup"
23 | codesign -s "Developer ID Application: Chris Cannam" -fv --deep --options runtime --entitlements "$entitlements" "$app"
24 | done
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/azi.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = lib
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | CONFIG -= qt
13 | CONFIG += plugin no_plugin_name_prefix release warn_on
14 |
15 | TARGET = azi
16 |
17 | OBJECTS_DIR = azi/o
18 |
19 | INCLUDEPATH += $$PWD/vamp-plugin-sdk
20 |
21 | QMAKE_CXXFLAGS -= -Werror
22 |
23 | win32-msvc* {
24 | LIBS += -EXPORT:vampGetPluginDescriptor
25 | }
26 | win32-g++* {
27 | LIBS += -Wl,--version-script=$$PWD/azi/vamp-plugin.map
28 | }
29 | linux* {
30 | LIBS += -Wl,--version-script=$$PWD/azi/vamp-plugin.map
31 | }
32 | macx* {
33 | LIBS += -exported_symbols_list $$PWD/azi/vamp-plugin.list
34 | }
35 |
36 | SOURCES += \
37 | azi/Azi.cpp \
38 | azi/plugins.cpp \
39 | vamp-plugin-sdk/src/vamp-sdk/FFT.cpp \
40 | vamp-plugin-sdk/src/vamp-sdk/PluginAdapter.cpp \
41 | vamp-plugin-sdk/src/vamp-sdk/RealTime.cpp
42 |
43 | HEADERS += \
44 | azi/Azi.h
45 |
46 |
--------------------------------------------------------------------------------
/icons/measure1cursor.xbm:
--------------------------------------------------------------------------------
1 | #define measure1cursor_width 32
2 | #define measure1cursor_height 32
3 | #define measure1cursor_x_hot 15
4 | #define measure1cursor_y_hot 14
5 | static unsigned char measure1cursor_bits[] = {
6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
8 | 0x00, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
9 | 0x00, 0x98, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00,
10 | 0x00, 0x83, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00,
11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
12 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
13 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
14 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
15 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
16 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
17 |
--------------------------------------------------------------------------------
/icons/measure2cursor.xbm:
--------------------------------------------------------------------------------
1 | #define measure2cursor_width 32
2 | #define measure2cursor_height 32
3 | #define measure2cursor_x_hot 16
4 | #define measure2cursor_y_hot 17
5 | static unsigned char measure2cursor_bits[] = {
6 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
7 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
10 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
11 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07,
12 | 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x61, 0x00,
13 | 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0f, 0x00,
14 | 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00,
15 | 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
16 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
17 |
--------------------------------------------------------------------------------
/pitch-track-align/pitch-track-align.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | mydir=$(dirname "$0")
4 |
5 | set -eu
6 |
7 | file1="$1"
8 | file2="$2"
9 |
10 | export PATH=$PATH:"$mydir"/../../sonic-annotator
11 |
12 | tmproot=/tmp/pitch-track-align-"$$"
13 | trap "rm -f $tmproot.a $tmproot.b" 0
14 |
15 | #sonic-annotator -t "$mydir/pitch-track.ttl" "$file1" -w csv --csv-one-file "$tmproot.a" --csv-omit-filename --csv-force
16 | #sonic-annotator -t "$mydir/pitch-track.ttl" "$file2" -w csv --csv-one-file "$tmproot.b" --csv-omit-filename --csv-force
17 |
18 | sonic-annotator -t "$mydir/note-track.ttl" "$file1" -w csv --csv-omit-filename --csv-stdout | awk -F, '{ print $1 "," $3 }' > "$tmproot.a"
19 | sonic-annotator -t "$mydir/note-track.ttl" "$file2" -w csv --csv-omit-filename --csv-stdout | awk -F, '{ print $1 "," $3 }' > "$tmproot.b"
20 |
21 | echo 1>&2
22 | echo "First track:" 1>&2
23 | cat "$tmproot.a" 1>&2
24 |
25 | echo 1>&2
26 | echo "Second track:" 1>&2
27 | cat "$tmproot.b" 1>&2
28 |
29 | echo "0,0"
30 |
31 | "$mydir"/pitch-track-align "$tmproot.a" "$tmproot.b"
32 |
33 |
--------------------------------------------------------------------------------
/deploy/linux/debian-dependencies.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | target=$1
4 |
5 | if [ ! -f "$target" ]; then
6 | echo "Usage: $0 target-executable"
7 | exit 1
8 | fi
9 |
10 | pfile=/tmp/packages_$$
11 | rfile=/tmp/redundant_$$
12 |
13 | trap "rm -f $pfile $rfile" 0
14 | echo 1>&2
15 |
16 | ldd "$target" | awk '{ print $3; }' | grep '^/' | while read lib; do
17 | if test -n "$lib" ; then
18 | dpkg-query -S "$lib"
19 | fi
20 | done | grep ': ' | awk -F: '{ print $1 }' | sort | uniq > $pfile
21 |
22 | echo "Packages providing required libraries:" 1>&2
23 | cat $pfile 1>&2
24 | echo 1>&2
25 |
26 | for p in `cat $pfile`; do
27 | echo Looking at $p 1>&2
28 | apt-cache showpkg "$p" | grep '^ ' | grep ',' | awk -F, '{ print $1; }' | \
29 | while read d; do
30 | if grep -q '^'$d'$' $pfile; then
31 | echo $p
32 | fi
33 | done
34 | done | sort | uniq > $rfile
35 |
36 | echo "Packages that can be eliminated because other packages depend on them:" 1>&2
37 | cat $rfile 1>&2
38 | echo 1>&2
39 |
40 | cat $pfile $rfile | sort | uniq -u | sed 's/$/,/' | fmt -1000 | sed 's/^/Depends: /' | sed 's/,$/, libc6/' | sed 's/ libjack0,//'
41 |
42 |
43 |
--------------------------------------------------------------------------------
/.hgignore:
--------------------------------------------------------------------------------
1 | syntax: glob
2 | Makefile
3 | Makefile.*
4 | */Makefile
5 | o/*
6 | */o/*
7 | */tmp_obj/*
8 | */tmp_moc/*
9 | doc/html/
10 | *.o
11 | *.dylib
12 | *.so
13 | *.so.*
14 | *.a
15 | *.wav
16 | *~
17 | *.orig
18 | *.rej
19 | re:^autom4te\.cache/
20 | re:^qrc_.*\.cpp$
21 | re:^vect$
22 | re:^sonic-lineup$
23 | re:^sonic-vector$
24 | re:^aclocal\.m4$
25 | re:^config\.log$
26 | re:^config\.pri$
27 | re:^config\.status$
28 | *.app
29 | Sonic Lineup*
30 | .DS_Store
31 | *.stash
32 | cov-int/*
33 | *.deb
34 | test-svcore-base
35 | test-svcore-system
36 | test-svcore-data-fileio
37 | test-svcore-data-model
38 | vamp-plugin-sdk
39 | svcore
40 | svgui
41 | svapp
42 | checker
43 | piper
44 | piper-vamp-cpp
45 | dataquay
46 | bqvec
47 | bqfft
48 | bqresample
49 | bqaudioio
50 | sv-dependency-builds
51 | icons/scalable
52 | vamp-plugin-load-checker
53 | piper-vamp-simple-server
54 | piper-convert
55 | .repoint*
56 | build_win32
57 | build_win32_debug
58 | build_win64
59 | build_win64_debug
60 | constant-q-cpp
61 | Dockerfile*.gen
62 | qm-vamp-plugins
63 | ..*
64 | deploy/linux/docker/output
65 | *.AppImage
66 | packages/
67 | pitch-track-align/pitch-track-align
68 | pitch-track-align/pitch-track-align.deps
69 |
--------------------------------------------------------------------------------
/deploy/linux/deb-skeleton/usr/share/doc/sonic-lineup/copyright:
--------------------------------------------------------------------------------
1 |
2 | Sonic Lineup was developed at Queen Mary, University of London.
3 | Copyright 2005-2007 Chris Cannam and copyright 2006-2019 Queen Mary,
4 | University of London.
5 |
6 | Sonic Lineup incorporates a number of audio analysis plugins:
7 |
8 | * MATCH Audio Alignment Plugin, by Simon Dixon and Chris Cannam
9 | * NNLS Chroma and Chordino, by Matthias Mauch
10 | * pYIN Pitch Estimator, by Matthias Mauch
11 | * QM Key Estimator, by Katy Noland and Christian Landone
12 |
13 | If you make use of this software for any public or commercial purpose,
14 | we ask you to kindly mention the authors and Queen Mary, University of
15 | London in your user-visible documentation. We're very happy to see
16 | this sort of use but would much appreciate being credited, separately
17 | from the requirements of the software license itself (see below).
18 |
19 | This program is free software: you can redistribute it and/or modify
20 | it under the terms of the GNU General Public License as published by
21 | the Free Software Foundation, either version 2 of the License, or (at
22 | your option) any later version. See the file /usr/share/common-licenses/GPL-2
23 | for more information.
24 |
25 |
--------------------------------------------------------------------------------
/vamp-plugin-sdk-files.pri:
--------------------------------------------------------------------------------
1 |
2 | VAMP_HEADERS += \
3 | vamp-plugin-sdk/vamp-hostsdk/PluginBase.h \
4 | vamp-plugin-sdk/vamp-hostsdk/PluginBufferingAdapter.h \
5 | vamp-plugin-sdk/vamp-hostsdk/PluginChannelAdapter.h \
6 | vamp-plugin-sdk/vamp-hostsdk/Plugin.h \
7 | vamp-plugin-sdk/vamp-hostsdk/PluginHostAdapter.h \
8 | vamp-plugin-sdk/vamp-hostsdk/PluginInputDomainAdapter.h \
9 | vamp-plugin-sdk/vamp-hostsdk/PluginLoader.h \
10 | vamp-plugin-sdk/vamp-hostsdk/PluginSummarisingAdapter.h \
11 | vamp-plugin-sdk/vamp-hostsdk/PluginWrapper.h \
12 | vamp-plugin-sdk/vamp-hostsdk/RealTime.h \
13 | vamp-plugin-sdk/src/vamp-hostsdk/Window.h
14 |
15 | VAMP_SOURCES += \
16 | vamp-plugin-sdk/src/vamp-hostsdk/PluginBufferingAdapter.cpp \
17 | vamp-plugin-sdk/src/vamp-hostsdk/PluginChannelAdapter.cpp \
18 | vamp-plugin-sdk/src/vamp-hostsdk/PluginHostAdapter.cpp \
19 | vamp-plugin-sdk/src/vamp-hostsdk/PluginInputDomainAdapter.cpp \
20 | vamp-plugin-sdk/src/vamp-hostsdk/PluginLoader.cpp \
21 | vamp-plugin-sdk/src/vamp-hostsdk/PluginSummarisingAdapter.cpp \
22 | vamp-plugin-sdk/src/vamp-hostsdk/PluginWrapper.cpp \
23 | vamp-plugin-sdk/src/vamp-hostsdk/RealTime.cpp \
24 | vamp-plugin-sdk/src/vamp-hostsdk/Files.cpp
25 |
--------------------------------------------------------------------------------
/deploy/win64/generate-wxs.ps1:
--------------------------------------------------------------------------------
1 |
2 | Set-StrictMode -Version 2.0
3 | $ErrorActionPreference = "Stop"
4 |
5 | $redist_parent_dir = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\"
6 |
7 | $redists = (Get-ChildItem -Path $redist_parent_dir -Name -Include 14.* -Attributes Directory)
8 |
9 | if (!$redists) {
10 | echo "ERROR: No 14.x redistributable directories found under $redist_parent_dir"
11 | exit 1
12 | }
13 |
14 | $redist_ver = $redists[-1]
15 |
16 | $version = (Get-Content version.h) -replace '#define VECT_VERSION ','' -replace '"','' -replace '-pre.*',''
17 | $wxs = "deploy\win64\sonic-lineup.wxs"
18 |
19 | $in = "$wxs.in"
20 |
21 | $redist_dir="$redist_parent_dir\$redist_ver\x64\Microsoft.VC142.CRT"
22 |
23 | echo "Generating $wxs..."
24 | echo " ...for Sonic Lineup version $version"
25 | echo " ...for redist version $redist_ver"
26 | echo " ...from $in"
27 | echo ""
28 |
29 | if (!(Test-Path -Path $redist_dir -PathType Container)) {
30 | echo "ERROR: Redistributable directory $redist_dir not found"
31 | exit 1
32 | }
33 |
34 | if (!(Test-Path -Path $in -PathType Leaf)) {
35 | echo "ERROR: Input file $in not found"
36 | exit 1
37 | }
38 |
39 | (Get-Content $in) -replace '@VERSION@', $version -replace '@REDIST_VER@', $redist_ver -replace '@W@', '' | Out-File -encoding ASCII $wxs
40 |
41 | echo "Done"
42 |
--------------------------------------------------------------------------------
/main/SmallSession.h:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #ifndef VECT_SMALL_SESSION_H
16 | #define VECT_SMALL_SESSION_H
17 |
18 | #include
19 | #include
20 |
21 | /**
22 | * Just a container for the origin URIs of the files in a session,
23 | * with load/save from/to XML.
24 | */
25 | struct SmallSession
26 | {
27 | QString mainFile;
28 | std::vector additionalFiles;
29 |
30 | /**
31 | * Save the given session to the given filename.
32 | * Throw std::runtime_error if the save fails.
33 | */
34 | static void save(const SmallSession &session, QString toSmallSessionFile);
35 |
36 | /**
37 | * Load a session from the given session file.
38 | * Throw std::runtime_error if the load fails.
39 | */
40 | static SmallSession load(QString fromSmallSessionFile);
41 | };
42 |
43 | #endif
44 |
45 |
--------------------------------------------------------------------------------
/convert.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = app
3 |
4 | CONFIG += stl exceptions console warn_on
5 | CONFIG -= qt
6 |
7 | exists(config.pri) {
8 | include(config.pri)
9 | }
10 |
11 | !exists(config.pri) {
12 | include(noconfig.pri)
13 |
14 | macx*: LIBS -= -framework CoreAudio -framework CoreMidi -framework AudioUnit -framework AudioToolbox -framework CoreFoundation -framework CoreServices -framework Accelerate -lbz2 -lz
15 | }
16 |
17 | # Can't support this flag with the JSON11 and basen modules as they stand
18 | QMAKE_CXXFLAGS -= -Werror
19 |
20 | # Using the "console" CONFIG flag above should ensure this happens for
21 | # normal Windows builds, but this may be necessary when cross-compiling
22 | win32-x-g++: QMAKE_LFLAGS += -Wl,-subsystem,console
23 |
24 | macx*: CONFIG -= app_bundle
25 |
26 | linux*: LIBS += -ldl
27 |
28 | TARGET = piper-convert
29 |
30 | OBJECTS_DIR = o
31 | MOC_DIR = o
32 |
33 | INCLUDEPATH += piper-vamp-cpp piper-vamp-cpp/ext vamp-plugin-sdk
34 |
35 | include(vamp-plugin-sdk-files.pri)
36 |
37 | for (file, VAMP_SOURCES) { SOURCES += $$file }
38 | for (file, VAMP_HEADERS) { HEADERS += $$file }
39 |
40 | HEADERS += \
41 | piper-vamp-cpp/vamp-capnp/piper.capnp.h \
42 | piper-vamp-cpp/vamp-capnp/VampnProto.h
43 |
44 | SOURCES += \
45 | piper-vamp-cpp/vamp-capnp/piper-capnp.cpp \
46 | piper-vamp-cpp/ext/json11/json11.cpp \
47 | piper-vamp-cpp/vamp-server/convert.cpp
48 |
--------------------------------------------------------------------------------
/server.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = app
3 |
4 | CONFIG += stl exceptions console warn_on
5 | CONFIG -= qt
6 |
7 | exists(config.pri) {
8 | include(config.pri)
9 | }
10 |
11 | !exists(config.pri) {
12 | include(noconfig.pri)
13 |
14 | macx*: LIBS -= -framework CoreAudio -framework CoreMidi -framework AudioUnit -framework AudioToolbox -framework CoreFoundation -framework CoreServices -framework Accelerate -lbz2 -lz
15 | }
16 |
17 | # Can't support this flag with the JSON11 and basen modules as they stand
18 | QMAKE_CXXFLAGS -= -Werror
19 |
20 | # Using the "console" CONFIG flag above should ensure this happens for
21 | # normal Windows builds, but this may be necessary when cross-compiling
22 | win32-x-g++: QMAKE_LFLAGS += -Wl,-subsystem,console
23 |
24 | macx*: CONFIG -= app_bundle
25 |
26 | linux*: LIBS += -ldl
27 |
28 | TARGET = piper-vamp-simple-server
29 |
30 | OBJECTS_DIR = o
31 | MOC_DIR = o
32 |
33 | INCLUDEPATH += piper-vamp-cpp piper-vamp-cpp/ext vamp-plugin-sdk
34 |
35 | include(vamp-plugin-sdk-files.pri)
36 |
37 | for (file, VAMP_SOURCES) { SOURCES += $$file }
38 | for (file, VAMP_HEADERS) { HEADERS += $$file }
39 |
40 | HEADERS += \
41 | piper-vamp-cpp/vamp-capnp/piper.capnp.h \
42 | piper-vamp-cpp/vamp-capnp/VampnProto.h
43 |
44 | SOURCES += \
45 | piper-vamp-cpp/vamp-capnp/piper-capnp.cpp \
46 | piper-vamp-cpp/ext/json11/json11.cpp \
47 | piper-vamp-cpp/vamp-server/simple-server.cpp
48 |
--------------------------------------------------------------------------------
/nnls-chroma.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = lib
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | CONFIG -= qt
13 | CONFIG += plugin no_plugin_name_prefix release warn_on
14 |
15 | TARGET = nnls-chroma
16 |
17 | OBJECTS_DIR = nnls-chroma/o
18 |
19 | INCLUDEPATH += $$PWD/vamp-plugin-sdk
20 |
21 | QMAKE_CXXFLAGS -= -Werror
22 |
23 | win32-msvc* {
24 | LIBS += -EXPORT:vampGetPluginDescriptor
25 | }
26 | win32-g++* {
27 | LIBS += -Wl,--version-script=$$PWD/nnls-chroma/vamp-plugin.map
28 | }
29 | linux* {
30 | LIBS += -Wl,--version-script=$$PWD/nnls-chroma/vamp-plugin.map
31 | }
32 | macx* {
33 | LIBS += -exported_symbols_list $$PWD/nnls-chroma/vamp-plugin.list
34 | }
35 |
36 | SOURCES += \
37 | nnls-chroma/chromamethods.cpp \
38 | nnls-chroma/NNLSBase.cpp \
39 | nnls-chroma/NNLSChroma.cpp \
40 | nnls-chroma/Chordino.cpp \
41 | nnls-chroma/Tuning.cpp \
42 | nnls-chroma/plugins.cpp \
43 | nnls-chroma/nnls.c \
44 | nnls-chroma/viterbi.cpp \
45 | vamp-plugin-sdk/src/vamp-sdk/FFT.cpp \
46 | vamp-plugin-sdk/src/vamp-sdk/PluginAdapter.cpp \
47 | vamp-plugin-sdk/src/vamp-sdk/RealTime.cpp
48 |
49 | HEADERS += \
50 | nnls-chroma/chromamethods.h \
51 | nnls-chroma/NNLSBase.h \
52 | nnls-chroma/NNLSChroma.h \
53 | nnls-chroma/Chordino.h \
54 | nnls-chroma/Tuning.h \
55 | nnls-chroma/nnls.h \
56 | nnls-chroma/viterbi.h
57 |
58 |
--------------------------------------------------------------------------------
/deploy/linux/build-and-test-appimage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Docker required
4 |
5 | set -eu
6 |
7 | current=$(hg id | awk '{ print $1; }')
8 |
9 | case "$current" in
10 | *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we know we can check it out separately and obtain the same contents"; exit 2;;
11 | *);;
12 | esac
13 |
14 | echo
15 | echo "Building appimage from revision $current..."
16 |
17 | dockerdir=deploy/linux/docker
18 |
19 | cat "$dockerdir"/Dockerfile_appimage.in | \
20 | perl -p -e "s/\[\[REVISION\]\]/$current/g" > \
21 | "$dockerdir"/Dockerfile_appimage.gen
22 |
23 | cat "$dockerdir"/Dockerfile_test_appimage.in | \
24 | perl -p -e "s/\[\[REVISION\]\]/$current/g" > \
25 | "$dockerdir"/Dockerfile_test_appimage.gen
26 |
27 | fgrep 'hg.sr.ht' ~/.ssh/known_hosts > "$dockerdir"/known_hosts
28 | cp ~/.ssh/id_rsa_build "$dockerdir"/id_rsa_build
29 | chmod 600 "$dockerdir"/known_hosts "$dockerdir"/id_rsa_build
30 | trap "rm $dockerdir/known_hosts $dockerdir/id_rsa_build" 0
31 |
32 | dockertag="cannam/sonic-lineup-appimage-$current"
33 |
34 | sudo docker build -t "$dockertag" -f "$dockerdir"/Dockerfile_appimage.gen "$dockerdir"
35 |
36 | outdir="$dockerdir/output"
37 | mkdir -p "$outdir"
38 |
39 | container=$(sudo docker create "$dockertag")
40 |
41 | sudo docker cp "$container":output-appimage.tar "$outdir"
42 | sudo docker rm "$container"
43 |
44 | ( cd "$outdir" ; tar xf output-appimage.tar && rm -f output-appimage.tar )
45 |
46 | sudo docker build -f "$dockerdir"/Dockerfile_test_appimage.gen "$dockerdir"
47 |
--------------------------------------------------------------------------------
/pyin.pro:
--------------------------------------------------------------------------------
1 | TEMPLATE = lib
2 |
3 | exists(config.pri) {
4 | include(config.pri)
5 | }
6 |
7 | !exists(config.pri) {
8 | include(noconfig.pri)
9 | }
10 |
11 | CONFIG -= qt
12 | CONFIG += plugin no_plugin_name_prefix release warn_on
13 |
14 | TARGET = pyin
15 |
16 | OBJECTS_DIR = pyin/o
17 |
18 | INCLUDEPATH += $$PWD/vamp-plugin-sdk
19 |
20 | QMAKE_CXXFLAGS -= -Werror
21 |
22 | win32-msvc* {
23 | LIBS += -EXPORT:vampGetPluginDescriptor
24 | }
25 | win32-g++* {
26 | LIBS += -Wl,--version-script=$$PWD/pyin/vamp-plugin.map
27 | }
28 | linux* {
29 | LIBS += -Wl,--version-script=$$PWD/pyin/vamp-plugin.map
30 | }
31 | macx* {
32 | LIBS += -exported_symbols_list $$PWD/pyin/vamp-plugin.list
33 | }
34 |
35 | SOURCES += \
36 | pyin/YinUtil.cpp \
37 | pyin/Yin.cpp \
38 | pyin/SparseHMM.cpp \
39 | pyin/MonoPitchHMM.cpp \
40 | pyin/MonoNoteParameters.cpp \
41 | pyin/MonoNoteHMM.cpp \
42 | pyin/MonoNote.cpp \
43 | pyin/libmain.cpp \
44 | pyin/YinVamp.cpp \
45 | pyin/PYinVamp.cpp \
46 | pyin/LocalCandidatePYIN.cpp \
47 | vamp-plugin-sdk/src/vamp-sdk/FFT.cpp \
48 | vamp-plugin-sdk/src/vamp-sdk/PluginAdapter.cpp \
49 | vamp-plugin-sdk/src/vamp-sdk/RealTime.cpp
50 |
51 | HEADERS += \
52 | pyin/YinUtil.h \
53 | pyin/Yin.h \
54 | pyin/SparseHMM.h \
55 | pyin/MonoPitchHMM.h \
56 | pyin/MonoNoteParameters.h \
57 | pyin/MonoNoteHMM.h \
58 | pyin/MonoNote.h \
59 | pyin/MeanFilter.h \
60 | pyin/YinVamp.h \
61 | pyin/PYinVamp.h \
62 | pyin/LocalCandidatePYIN.h
63 |
64 |
--------------------------------------------------------------------------------
/sonic-lineup.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = subdirs
3 |
4 | SUBDIRS += \
5 | sub_base
6 |
7 | win32-msvc* {
8 | SUBDIRS += \
9 | sub_os_other \
10 | sub_os_win10
11 | }
12 |
13 | # We build the tests on every platform, though at the time of
14 | # writing they are only automatically run on non-Windows platforms
15 | # (because of the difficulty of getting them running nicely in the
16 | # IDE without causing great confusion if a test fails).
17 | SUBDIRS += \
18 | sub_test_svcore_base \
19 | sub_test_svcore_system \
20 | sub_test_svcore_data_fileio \
21 | sub_test_svcore_data_model
22 |
23 | SUBDIRS += \
24 | checker \
25 | sub_server \
26 | sub_convert \
27 | sub_match \
28 | sub_tuning_difference \
29 | sub_pyin \
30 | sub_nnls_chroma \
31 | sub_qm_vamp_plugins \
32 | sub_azi \
33 | sub_vect
34 |
35 | sub_base.file = base.pro
36 |
37 | sub_os_other.file = os-other.pro
38 | sub_os_win10.file = os-win10.pro
39 |
40 | sub_test_svcore_base.file = test-svcore-base.pro
41 | sub_test_svcore_system.file = test-svcore-system.pro
42 | sub_test_svcore_data_fileio.file = test-svcore-data-fileio.pro
43 | sub_test_svcore_data_model.file = test-svcore-data-model.pro
44 |
45 | sub_server.file = server.pro
46 | sub_convert.file = convert.pro
47 | sub_match.file = match.pro
48 | sub_pyin.file = pyin.pro
49 | sub_tuning_difference.file = tuning-difference.pro
50 | sub_nnls_chroma.file = nnls-chroma.pro
51 | sub_qm_vamp_plugins.file = qm-vamp-plugins.pro
52 | sub_azi.file = azi.pro
53 | sub_vect.file = vectapp.pro
54 |
55 | CONFIG += ordered
56 |
--------------------------------------------------------------------------------
/deploy/osx/copy-qt.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eu
4 |
5 | app="$1"
6 | if [ -z "$app" ]; then
7 | echo "Usage: $0 "
8 | echo "Provide appname without the .app extension, please"
9 | exit 2
10 | fi
11 |
12 | frameworks="QtCore QtNetwork QtGui QtXml QtSvg QtWidgets QtPrintSupport QtDBus"
13 |
14 | plugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen macstyle"
15 |
16 | qtdir=$(grep "Command:" Makefile | head -1 | awk '{ print $3; }' | sed s,/bin/.*,,)
17 |
18 | if [ ! -d "$qtdir" ]; then
19 | echo "Failed to discover Qt installation directory from Makefile, exiting"
20 | exit 2
21 | fi
22 |
23 | fdir="$app.app/Contents/Frameworks"
24 | pdir="$app.app/Contents/plugins"
25 |
26 | mkdir -p "$fdir"
27 | mkdir -p "$pdir"
28 |
29 | echo
30 | echo "Copying frameworks..."
31 | for fwk in $frameworks; do
32 | if [ ! -d "$qtdir/lib/$fwk.framework" ]; then
33 | if [ "$fwk" = "QtDBus" ]; then
34 | echo "QtDBus.framework not found, assuming Qt was built without DBus support"
35 | continue
36 | fi
37 | fi
38 | cp -v "$qtdir/lib/$fwk.framework/$fwk" "$fdir" || exit 2
39 | done
40 |
41 | echo "Done"
42 |
43 | echo
44 | echo "Copying plugins..."
45 | for plug in $plugins; do
46 | pfile=$(ls "$qtdir"/plugins/*/libq"$plug".dylib)
47 | if [ ! -f "$pfile" ]; then
48 | echo "Failed to find plugin $plug, exiting"
49 | exit 2
50 | fi
51 | target="$pdir"/${pfile##?*plugins/}
52 | tdir=`dirname "$target"`
53 | mkdir -p "$tdir"
54 | cp -v "$pfile" "$target" || exit 2
55 | done
56 |
57 | # Sometimes the copied-in files are read-only: correct that
58 | chmod -R u+w "$app.app"
59 |
60 | echo "Done"
61 |
62 |
63 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | Sonic Lineup
3 | ============
4 |
5 | #### An application for comparative visualisation and alignment of related audio recordings
6 |
7 | Sonic Lineup is an application for quick read-only comparative
8 | visualisation of multiple audio files whose contents consist of
9 | different performances of the same work or recordings of the same
10 | material.
11 |
12 | For more information, please see http://www.sonicvisualiser.org/sonic-lineup/.
13 |
14 |
15 | Credits
16 | -------
17 |
18 | Sonic Lineup was developed at the Centre for Digital Music,
19 | Queen Mary, University of London.
20 |
21 | http://c4dm.eecs.qmul.ac.uk/
22 |
23 | Sonic Lineup was written by Chris Cannam, copyright 2005-2007 Chris
24 | Cannam and copyright 2006-2019 Queen Mary, University of London,
25 | except where indicated in the individual source files.
26 |
27 | Sonic Lineup incorporates a number of audio analysis plugins:
28 |
29 | * MATCH Audio Alignment Plugin, by Simon Dixon and Chris Cannam
30 | * NNLS Chroma and Chordino, by Matthias Mauch
31 | * pYIN Pitch Estimator, by Matthias Mauch
32 | * QM Key Estimator, by Katy Noland and Christian Landone
33 |
34 | Distributed under the GNU General Public License. See the file COPYING
35 | for details.
36 |
37 |
38 | Automated build reports
39 | -----------------------
40 |
41 | * Linux and macOS CI build: [](https://travis-ci.org/sonic-visualiser/sonic-lineup)
42 | * Windows CI build: [](https://ci.appveyor.com/project/cannam/sonic-lineup)
43 |
--------------------------------------------------------------------------------
/deploy/src/archive.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eu
4 |
5 | tag=`hg tags | grep '^v' | head -1 | awk '{ print $1; }'`
6 |
7 | v=`echo "$tag" | sed 's/v//' | sed 's/_.*$//'`
8 |
9 | echo -n "Package up source code for version $v from tag $tag [Yn] ? "
10 | read yn
11 | case "$yn" in "") ;; [Yy]) ;; *) exit 3;; esac
12 | echo "Proceeding"
13 |
14 | current=$(hg id | awk '{ print $1; }')
15 |
16 | case "$current" in
17 | *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we can update to tag and back again safely"; exit 2;;
18 | *);;
19 | esac
20 |
21 | echo
22 | echo -n "Packaging up version $v from tag $tag... "
23 |
24 | hg update -r"$tag"
25 |
26 | ./repoint archive "$(pwd)"/packages/sonic-lineup-"$v".tar.gz \
27 | --exclude \
28 | sv-dependency-builds \
29 | repoint.pri \
30 | vamp-plugin-sdk/test \
31 | pyin/testdata \
32 | qm-vamp-plugins/build \
33 | qm-vamp-plugins/test \
34 | constant-q-cpp/test
35 |
36 | hg update -r"$current"
37 |
38 | echo Done
39 | echo
40 |
41 | # Test that the appropriate version of the docs exist on the website
42 |
43 | doc_url="http://sonicvisualiser.org/sonic-lineup/doc/reference/$v/en/"
44 | doc_status=$(curl -sL -w "%{http_code}" "$doc_url" -o /dev/null)
45 |
46 | if [ "$doc_status" = "404" ]; then
47 | echo "*** WARNING: Documentation URL returns a 404:"
48 | echo "*** $doc_url"
49 | echo "*** Please fix this before release!"
50 | echo "*** And remember to update the link from"
51 | echo " http://www.sonicvisualiser.org/sonic-lineup/index.html !"
52 | echo
53 | fi
54 |
--------------------------------------------------------------------------------
/deploy/linux/build-and-test-deb.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Docker required
4 |
5 | set -eu
6 |
7 | current=$(hg id | awk '{ print $1; }')
8 | release=$(perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h)
9 |
10 | case "$current" in
11 | *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we know we can check it out separately and obtain the same contents"; exit 2;;
12 | *);;
13 | esac
14 |
15 | echo
16 | echo "Building Debian deb archive from revision $current..."
17 |
18 | dockerdir=deploy/linux/docker
19 |
20 | cat "$dockerdir"/Dockerfile_deb.in | \
21 | perl -p -e "s/\[\[REVISION\]\]/$current/g" | \
22 | perl -p -e "s/\[\[RELEASE\]\]/$release/g" > \
23 | "$dockerdir"/Dockerfile_deb.gen
24 |
25 | cat "$dockerdir"/Dockerfile_test_deb.in | \
26 | perl -p -e "s/\[\[REVISION\]\]/$current/g" | \
27 | perl -p -e "s/\[\[RELEASE\]\]/$release/g" > \
28 | "$dockerdir"/Dockerfile_test_deb.gen
29 |
30 | fgrep 'hg.sr.ht' ~/.ssh/known_hosts > "$dockerdir"/known_hosts
31 | cp ~/.ssh/id_rsa_build "$dockerdir"/id_rsa_build
32 | chmod 600 "$dockerdir"/known_hosts "$dockerdir"/id_rsa_build
33 | trap "rm $dockerdir/known_hosts $dockerdir/id_rsa_build" 0
34 |
35 | dockertag="cannam/sonic-lineup-deb-$current"
36 |
37 | sudo docker build -t "$dockertag" -f "$dockerdir"/Dockerfile_deb.gen "$dockerdir"
38 |
39 | outdir="$dockerdir/output"
40 | mkdir -p "$outdir"
41 |
42 | container=$(sudo docker create "$dockertag")
43 |
44 | sudo docker cp "$container":output-deb.tar "$outdir"
45 | sudo docker rm "$container"
46 |
47 | ( cd "$outdir" ; tar xf output-deb.tar && rm -f output-deb.tar )
48 |
49 | sudo docker build -f "$dockerdir"/Dockerfile_test_deb.gen "$dockerdir"
50 |
--------------------------------------------------------------------------------
/repoint-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "libraries": {
3 | "vamp-plugin-sdk": {
4 | "pin": "0e32c328b02a"
5 | },
6 | "svcore": {
7 | "pin": "f803d3c33f76"
8 | },
9 | "svgui": {
10 | "pin": "dc0e47f234a2"
11 | },
12 | "svapp": {
13 | "pin": "1089d65c585d"
14 | },
15 | "checker": {
16 | "pin": "e839338d3869"
17 | },
18 | "piper": {
19 | "pin": "3a742c556ac1f2bf9823f30b937c71c690e1f6ae"
20 | },
21 | "piper-vamp-cpp": {
22 | "pin": "f0d3ab2952b21d287b481759bda986427df10ef7"
23 | },
24 | "dataquay": {
25 | "pin": "35098262cadd"
26 | },
27 | "bqvec": {
28 | "pin": "cd235ecbeb31"
29 | },
30 | "bqfft": {
31 | "pin": "e1c392f85e97"
32 | },
33 | "bqresample": {
34 | "pin": "c2fb51b31fe4"
35 | },
36 | "bqaudioio": {
37 | "pin": "4fe94361597f"
38 | },
39 | "bqaudiostream": {
40 | "pin": "a0926b93e771"
41 | },
42 | "bqthingfactory": {
43 | "pin": "7686116dcdd5"
44 | },
45 | "sv-dependency-builds": {
46 | "pin": "08ae793730bd"
47 | },
48 | "icons/scalable": {
49 | "pin": "fd0ace21dce3"
50 | },
51 | "match": {
52 | "pin": "aac9ad4064ea"
53 | },
54 | "constant-q-cpp": {
55 | "pin": "7ac84048e3e43c433d88e12d221af15e50f41591"
56 | },
57 | "tuning-difference": {
58 | "pin": "8fd1c994f937"
59 | },
60 | "pyin": {
61 | "pin": "a7d9c6142f8f"
62 | },
63 | "nnls-chroma": {
64 | "pin": "82d5d11b68d7"
65 | },
66 | "qm-vamp-plugins": {
67 | "pin": "06933fecfa33aec41a07cc865098be7545ffcca3"
68 | },
69 | "qm-vamp-plugins/lib/qm-dsp": {
70 | "pin": "e34a3cc188332ed7c33cd9257ef164de5b587191"
71 | },
72 | "azi": {
73 | "pin": "299df1b44eff"
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language:
2 | - cpp
3 |
4 | matrix:
5 | include:
6 | - os: osx
7 | osx_image: xcode11
8 | - os: linux
9 | dist: xenial
10 | sudo: required
11 | addons:
12 | apt:
13 | packages:
14 | - libbz2-dev libfftw3-dev libfishsound1-dev libid3tag0-dev liblo-dev liblrdf0-dev libmad0-dev liboggz2-dev libopus-dev libopusfile-dev libpulse-dev libsamplerate-dev libsndfile-dev libsord-dev libxml2-utils libboost-all-dev portaudio19-dev qt5-default libqt5svg5-dev raptor-utils librubberband-dev autoconf libtool git mlton
15 |
16 | before_install:
17 | - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew update ; fi
18 | - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew unlink python ; fi
19 | - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew install polyml ; fi
20 | - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew install qt5 ; fi
21 | - if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then export PATH=$PATH:/usr/local/opt/qt5/bin ; fi
22 | - ( cd ../ ; git clone https://github.com/sandstorm-io/capnproto )
23 | - ( cd ../capnproto/ ; git checkout v0.6.1 )
24 | - ( cd ../capnproto/c++ ; autoreconf -i )
25 | - ( cd ../capnproto/c++ ; ./configure && make && sudo make install )
26 |
27 | before_script:
28 | - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ./configure ; else ./repoint install && qmake -r sonic-lineup.pro ; fi
29 |
30 | script:
31 | - make -j3
32 | - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then sudo make install ; fi
33 | - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then /usr/local/bin/sonic-lineup -v ; fi
34 | - if [[ "$TRAVIS_OS_NAME" = "linux" ]] ; then ( for p in azi match-vamp-plugin nnls-chroma pyin qm-vamp-plugins tuning-difference; do echo /usr/local/lib/sonic-lineup/$p.so ; done ) | /usr/local/lib/sonic-lineup/vamp-plugin-load-checker vampGetPluginDescriptor ; fi
35 |
36 |
--------------------------------------------------------------------------------
/capnp-regen.pri:
--------------------------------------------------------------------------------
1 |
2 | capnpc.target = piper-vamp-cpp/vamp-capnp/piper.capnp.h
3 | capnpc.depends = $$PWD/piper/capnp/piper.capnp
4 |
5 | capnpc.commands = capnp compile --src-prefix=$$PWD/piper/capnp -oc++:$$PWD/piper-vamp-cpp/vamp-capnp $$capnpc.depends
6 |
7 | macx* {
8 | capnpc.commands=$$PWD/sv-dependency-builds/osx/bin/capnp -I$$PWD/sv-dependency-builds/osx/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/osx/bin/capnpc-c++:$$PWD/piper-vamp-cpp/vamp-capnp $$capnpc.depends
9 | }
10 |
11 | win32-g++ {
12 | capnpc.commands=$$PWD/sv-dependency-builds/win32-mingw/bin/capnp -I$$PWD/sv-dependency-builds/win32-mingw/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/win32-mingw/bin/capnpc-c++:$$PWD/piper-vamp-cpp/vamp-capnp $$capnpc.depends
13 | }
14 |
15 | win32-msvc* {
16 | # This config is actually for 64-bit Windows builds -- see
17 | # comments in noconfig.pri.
18 |
19 | # With MSVC2017 we have a problem that the header dependency is
20 | # written out with the relative path from the build dir to the
21 | # source dir (e.g. ..\sonic-visualiser\...) so if the header
22 | # target path doesn't match that, the build fails before
23 | # regenerating it. Not a problem with VC2015 for some reason.
24 | # I hope using the relative path as target should fix it without
25 | # breaking the VC2015 build.
26 |
27 | capnpc.target = ../$$basename(PWD)/piper-vamp-cpp/vamp-capnp/piper.capnp.h
28 | capnpc.commands=$$PWD/sv-dependency-builds/win64-msvc/bin/capnp -I$$PWD/sv-dependency-builds/win64-msvc/include compile --src-prefix=$$PWD/piper/capnp -o$$PWD/sv-dependency-builds/win64-msvc/bin/capnpc-c++:$$PWD/piper-vamp-cpp/vamp-capnp $$capnpc.depends
29 | }
30 |
31 | QMAKE_EXTRA_TARGETS += capnpc
32 | PRE_TARGETDEPS += $$capnpc.target
33 | QMAKE_CLEAN += $$capnpc.target
34 |
35 |
--------------------------------------------------------------------------------
/bq-files.pri:
--------------------------------------------------------------------------------
1 |
2 | BQ_HEADERS += \
3 | bqvec/bqvec/Allocators.h \
4 | bqvec/bqvec/Barrier.h \
5 | bqvec/bqvec/ComplexTypes.h \
6 | bqvec/bqvec/Restrict.h \
7 | bqvec/bqvec/RingBuffer.h \
8 | bqvec/bqvec/VectorOpsComplex.h \
9 | bqvec/bqvec/VectorOps.h \
10 | bqvec/pommier/neon_mathfun.h \
11 | bqvec/pommier/sse_mathfun.h \
12 | bqfft/bqfft/FFT.h \
13 | bqresample/bqresample/Resampler.h \
14 | bqresample/speex/speex_resampler.h \
15 | bqaudioio/bqaudioio/ApplicationPlaybackSource.h \
16 | bqaudioio/bqaudioio/ApplicationRecordTarget.h \
17 | bqaudioio/bqaudioio/AudioFactory.h \
18 | bqaudioio/bqaudioio/ResamplerWrapper.h \
19 | bqaudioio/bqaudioio/SystemAudioIO.h \
20 | bqaudioio/bqaudioio/SystemPlaybackTarget.h \
21 | bqaudioio/bqaudioio/SystemRecordSource.h \
22 | bqaudioio/src/DynamicJACK.h \
23 | bqaudioio/src/JACKAudioIO.h \
24 | bqaudioio/src/Log.h \
25 | bqaudioio/src/PortAudioIO.h \
26 | bqaudioio/src/PulseAudioIO.h \
27 | bqaudiostream/bqaudiostream/AudioReadStream.h \
28 | bqaudiostream/bqaudiostream/AudioReadStreamFactory.h \
29 | bqaudiostream/bqaudiostream/Exceptions.h \
30 | bqthingfactory/bqthingfactory/ThingFactory.h
31 |
32 | BQ_SOURCES += \
33 | bqvec/src/Allocators.cpp \
34 | bqvec/src/Barrier.cpp \
35 | bqvec/src/VectorOpsComplex.cpp \
36 | bqfft/src/FFT.cpp \
37 | bqresample/src/Resampler.cpp \
38 | bqaudioio/src/AudioFactory.cpp \
39 | bqaudioio/src/JACKAudioIO.cpp \
40 | bqaudioio/src/Log.cpp \
41 | bqaudioio/src/PortAudioIO.cpp \
42 | bqaudioio/src/PulseAudioIO.cpp \
43 | bqaudioio/src/ResamplerWrapper.cpp \
44 | bqaudioio/src/SystemPlaybackTarget.cpp \
45 | bqaudioio/src/SystemRecordSource.cpp \
46 | bqaudiostream/src/AudioReadStream.cpp \
47 | bqaudiostream/src/AudioReadStreamFactory.cpp \
48 | bqaudiostream/src/AudioStreamExceptions.cpp
49 |
50 |
--------------------------------------------------------------------------------
/base.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = lib
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | include(base.pri)
13 |
14 | CONFIG += staticlib
15 | QT += network xml
16 | QT -= gui
17 |
18 | TARGET = base
19 |
20 | OBJECTS_DIR = o
21 | MOC_DIR = o
22 |
23 | exists(repoint.pri) {
24 | include(repoint.pri)
25 | }
26 |
27 | include(bq-files.pri)
28 | include(vamp-plugin-sdk-files.pri)
29 | include(svcore/files.pri)
30 | include(capnp-regen.pri)
31 |
32 | DATAQUAY_SOURCES=$$fromfile(dataquay/lib.pro, SOURCES)
33 | DATAQUAY_HEADERS=$$fromfile(dataquay/lib.pro, HEADERS)
34 |
35 | CHECKER_SOURCES=$$fromfile(checker/checker.pri, SOURCES)
36 | CHECKER_HEADERS=$$fromfile(checker/checker.pri, HEADERS)
37 |
38 | CLIENT_HEADERS=$$fromfile(piper-vamp-cpp/vamp-client/qt/test.pro, HEADERS)
39 |
40 | for (file, BQ_SOURCES) { SOURCES += $$file }
41 | for (file, BQ_HEADERS) { HEADERS += $$file }
42 |
43 | for (file, VAMP_SOURCES) { SOURCES += $$file }
44 | for (file, VAMP_HEADERS) { HEADERS += $$file }
45 |
46 | for (file, DATAQUAY_SOURCES) { SOURCES += $$sprintf("dataquay/%1", $$file) }
47 | for (file, DATAQUAY_HEADERS) { HEADERS += $$sprintf("dataquay/%1", $$file) }
48 |
49 | for (file, CHECKER_SOURCES) { SOURCES += $$sprintf("checker/%1", $$file) }
50 | for (file, CHECKER_HEADERS) { HEADERS += $$sprintf("checker/%1", $$file) }
51 |
52 | for (file, SVCORE_SOURCES) { SOURCES += $$sprintf("svcore/%1", $$file) }
53 | for (file, SVCORE_HEADERS) { HEADERS += $$sprintf("svcore/%1", $$file) }
54 |
55 | win32-msvc* {
56 | SOURCES -= svcore/system/os-other.cpp
57 | }
58 |
59 | for (file, CLIENT_HEADERS) {
60 | HEADERS += $$sprintf("piper-vamp-cpp/vamp-client/qt/%1", $$file)
61 | }
62 |
63 | SOURCES += piper-vamp-cpp/vamp-capnp/piper-capnp.cpp
64 |
65 |
--------------------------------------------------------------------------------
/deploy/clean-build-and-package:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eu
4 |
5 | current=$(hg id | awk '{ print $1; }')
6 |
7 | case "$current" in
8 | *+) echo "ERROR: Current working copy has been modified - not proceeding";exit 2;;
9 | *);;
10 | esac
11 |
12 | version=`perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h`
13 |
14 | mkdir -p packages
15 | echo
16 |
17 | if [ -d /Applications ]; then
18 |
19 | if [ ! -f Makefile ]; then
20 | echo "You must have run a routine normal build at least once before this, so I can see which Qt settings to use"
21 | exit 1
22 | fi
23 |
24 | qmake=$(grep '^# Command: ' Makefile | awk '{ print $3; }')
25 |
26 | echo "Proceed to rebuild, package, and sign version $version using"
27 | echo -n "qmake path \"$qmake\" [Yn] ? "
28 | read yn
29 | case "$yn" in "") ;; [Yy]) ;; *) exit 3;; esac
30 | echo "Proceeding"
31 |
32 | app="Sonic Lineup"
33 | volume="$app"-"$version"
34 | dmg="$volume".dmg
35 |
36 | rm -rf "$app.app"
37 | rm -rf "$volume"
38 | rm -f "$dmg"
39 |
40 | ./repoint install
41 |
42 | rm -rf .qmake.stash
43 | "$qmake" -r
44 | make clean
45 | make -j3
46 | deploy/osx/deploy-and-package.sh
47 |
48 | mv "$dmg" packages/
49 |
50 | else
51 |
52 | echo -n "Proceed to rebuild and package version $version [Yn] ? "
53 | read yn
54 | case "$yn" in "") ;; [Yy]) ;; *) exit 3;; esac
55 | echo "Proceeding"
56 |
57 | ./deploy/linux/build-and-test-appimage.sh
58 |
59 | squashedversion=$(echo "$version" | sed 's/_-//g')
60 |
61 | mv deploy/linux/docker/output/SonicLineup-"$current"-x86_64.AppImage \
62 | packages/SonicLineup-"$squashedversion"-x86_64.AppImage
63 |
64 | ./deploy/linux/build-and-test-deb.sh
65 |
66 | mv deploy/linux/docker/output/sonic-lineup_"$version"_amd64.deb \
67 | packages/
68 | fi
69 |
70 | echo
71 |
72 | ls -l packages
73 |
--------------------------------------------------------------------------------
/main/PreferencesDialog.h:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #ifndef _PREFERENCES_DIALOG_H_
16 | #define _PREFERENCES_DIALOG_H_
17 |
18 | #include
19 |
20 | #include "base/Window.h"
21 |
22 | class WindowTypeSelector;
23 | class QPushButton;
24 | class QLineEdit;
25 | class QCheckBox;
26 |
27 | class PreferencesDialog : public QDialog
28 | {
29 | Q_OBJECT
30 |
31 | public:
32 | PreferencesDialog(QWidget *parent = 0);
33 | virtual ~PreferencesDialog();
34 |
35 | public slots:
36 | void applicationClosing(bool quickly);
37 |
38 | protected slots:
39 | void tuningFrequencyChanged(double freq);
40 |
41 | void alignmentProgramToggleClicked();
42 | void alignmentProgramButtonClicked();
43 | void normaliseAudioToggleClicked();
44 |
45 | void okClicked();
46 | void applyClicked();
47 | void cancelClicked();
48 |
49 | protected:
50 | QPushButton *m_applyButton;
51 |
52 | QCheckBox *m_alignmentProgramToggle;
53 | QLineEdit *m_alignmentProgramEdit;
54 | QPushButton *m_alignmentProgramButton;
55 | QCheckBox *m_normaliseAudioToggle;
56 |
57 | double m_tuningFrequency;
58 | bool m_useAlignmentProgram;
59 | QString m_alignmentProgram;
60 | bool m_normaliseAudio;
61 |
62 | bool m_changesOnRestart;
63 | };
64 |
65 | #endif
66 |
--------------------------------------------------------------------------------
/tuning-difference.pro:
--------------------------------------------------------------------------------
1 | TEMPLATE = lib
2 |
3 | exists(config.pri) {
4 | include(config.pri)
5 | }
6 |
7 | !exists(config.pri) {
8 | include(noconfig.pri)
9 | }
10 |
11 | CONFIG -= qt
12 | CONFIG += plugin no_plugin_name_prefix release warn_on
13 |
14 | TARGET = tuning-difference
15 |
16 | OBJECTS_DIR = tuning-difference/o
17 |
18 | INCLUDEPATH += $$PWD/vamp-plugin-sdk $$PWD/constant-q-cpp $$PWD/constant-q-cpp/cq $$PWD/constant-q-cpp/src/ext/kissfft $$PWD/constant-q-cpp/src/ext/kissfft/tools
19 |
20 | QMAKE_CXXFLAGS -= -Werror
21 |
22 | DEFINES += kiss_fft_scalar=double
23 |
24 | win32-msvc* {
25 | LIBS += -EXPORT:vampGetPluginDescriptor
26 | }
27 | win32-g++* {
28 | LIBS += -Wl,--version-script=$$PWD/tuning-difference/vamp-plugin.map
29 | }
30 | linux* {
31 | LIBS += -Wl,--version-script=$$PWD/tuning-difference/vamp-plugin.map
32 | }
33 | macx* {
34 | LIBS += -exported_symbols_list $$PWD/tuning-difference/vamp-plugin.list
35 | }
36 |
37 | SOURCES += \
38 | constant-q-cpp/src/CQKernel.cpp \
39 | constant-q-cpp/src/ConstantQ.cpp \
40 | constant-q-cpp/src/CQSpectrogram.cpp \
41 | constant-q-cpp/src/CQInverse.cpp \
42 | constant-q-cpp/src/Chromagram.cpp \
43 | constant-q-cpp/src/Pitch.cpp \
44 | constant-q-cpp/src/dsp/FFT.cpp \
45 | constant-q-cpp/src/dsp/KaiserWindow.cpp \
46 | constant-q-cpp/src/dsp/MathUtilities.cpp \
47 | constant-q-cpp/src/dsp/Resampler.cpp \
48 | constant-q-cpp/src/dsp/SincWindow.cpp \
49 | constant-q-cpp/src/ext/kissfft/kiss_fft.c \
50 | constant-q-cpp/src/ext/kissfft/tools/kiss_fftr.c \
51 | tuning-difference/src/TuningDifference.cpp \
52 | tuning-difference/src/plugins.cpp \
53 | vamp-plugin-sdk/src/vamp-sdk/PluginAdapter.cpp \
54 | vamp-plugin-sdk/src/vamp-sdk/RealTime.cpp
55 |
56 | HEADERS += \
57 | tuning-difference/src/TuningDifference.h
58 |
59 |
--------------------------------------------------------------------------------
/match.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = lib
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | CONFIG -= qt
13 | CONFIG += plugin no_plugin_name_prefix release warn_on
14 |
15 | TARGET = match-vamp-plugin
16 |
17 | OBJECTS_DIR = match/o
18 |
19 | INCLUDEPATH += $$PWD/vamp-plugin-sdk
20 |
21 | QMAKE_CXXFLAGS -= -Werror
22 |
23 | DEFINES += USE_COMPACT_TYPES
24 |
25 | win32-msvc* {
26 | LIBS += -EXPORT:vampGetPluginDescriptor
27 | }
28 | win32-g++* {
29 | LIBS += -Wl,--version-script=$$PWD/match/vamp-plugin.map
30 | }
31 | linux* {
32 | LIBS += -Wl,--version-script=$$PWD/match/vamp-plugin.map
33 | }
34 | macx* {
35 | LIBS += -exported_symbols_list $$PWD/match/vamp-plugin.list
36 | }
37 |
38 | SOURCES += \
39 | match/src/DistanceMetric.cpp \
40 | match/src/FeatureConditioner.cpp \
41 | match/src/FeatureExtractor.cpp \
42 | match/src/Finder.cpp \
43 | match/src/FullDTW.cpp \
44 | match/src/Matcher.cpp \
45 | match/src/MatchFeatureFeeder.cpp \
46 | match/src/MatchPipeline.cpp \
47 | match/src/MatchVampPlugin.cpp \
48 | match/src/Path.cpp \
49 | match/src/SubsequenceMatchVampPlugin.cpp \
50 | match/src/libmain.cpp \
51 | vamp-plugin-sdk/src/vamp-sdk/FFT.cpp \
52 | vamp-plugin-sdk/src/vamp-sdk/PluginAdapter.cpp \
53 | vamp-plugin-sdk/src/vamp-sdk/RealTime.cpp
54 |
55 | HEADERS += \
56 | match/src/DistanceMetric.h \
57 | match/src/FeatureConditioner.h \
58 | match/src/FeatureExtractor.h \
59 | match/src/Finder.h \
60 | match/src/FullDTW.h \
61 | match/src/Matcher.h \
62 | match/src/MatchFeatureFeeder.h \
63 | match/src/MatchPipeline.h \
64 | match/src/MatchTypes.h \
65 | match/src/MatchVampPlugin.h \
66 | match/src/Path.h \
67 | match/src/SubsequenceMatchVampPlugin.h
68 |
69 |
70 |
--------------------------------------------------------------------------------
/deploy/osx/notarize.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ## The following assumes we have generated an app password at
4 | ## appleid.apple.com and then stored it to keychain id "altool" using
5 | ## e.g.
6 | ## security add-generic-password -a "cannam+apple@all-day-breakfast.com" \
7 | ## -w "generated-app-password" -s "altool"
8 |
9 | ## NB to verify:
10 | # spctl -a -v "/Applications/Application.app"
11 |
12 | user="cannam+apple@all-day-breakfast.com"
13 | bundleid="org.sonicvisualiser.SonicLineup"
14 |
15 | set -e
16 |
17 | dmg="$1"
18 |
19 | if [ ! -f "$dmg" ] || [ -n "$2" ]; then
20 | echo "Usage: $0 "
21 | echo " e.g. $0 MyApplication-1.0.dmg"
22 | exit 2
23 | fi
24 |
25 | set -u
26 |
27 | echo
28 | echo "Uploading for notarization..."
29 |
30 | uuidfile=.notarization-uuid
31 | rm -f "$uuidfile"
32 |
33 | xcrun altool --notarize-app \
34 | -f "$dmg" \
35 | --primary-bundle-id "$bundleid" \
36 | -u "$user" \
37 | -p @keychain:altool 2>&1 | tee "$uuidfile"
38 |
39 | uuid=$(cat "$uuidfile" | grep RequestUUID | awk '{ print $3; }')
40 |
41 | if [ -z "$uuid" ]; then
42 | echo
43 | echo "Failed (no UUID returned, check output)"
44 | exit 1
45 | fi
46 |
47 | echo "Done, UUID is $uuid"
48 |
49 | echo
50 | echo "Waiting and checking for completion..."
51 |
52 | while true ; do
53 | sleep 30
54 | status=$(xcrun altool --notarization-info "$uuid" -u "$user" -p @keychain:altool 2>&1)
55 | if echo "$status" | grep -q 'Package Approved' ; then
56 | echo
57 | echo "Approved! Status output is:"
58 | echo "$status"
59 | break
60 | elif echo "$status" | grep -q 'in progress' ; then
61 | echo
62 | echo "Still in progress... Status output is:"
63 | echo "$status"
64 | echo "Waiting..."
65 | else
66 | echo
67 | echo "Failure or unknown status in output:"
68 | echo "$status"
69 | exit 2
70 | fi
71 | done
72 |
73 | echo
74 | echo "Stapling to package..."
75 |
76 | xcrun stapler staple "$dmg" || exit 1
77 |
78 |
--------------------------------------------------------------------------------
/deploy/osx/paths.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | app="$1"
6 | if [ -z "$app" ]; then
7 | echo "Usage: $0 "
8 | echo "Provide appname without the .app extension, please"
9 | exit 2
10 | fi
11 |
12 | set -u
13 |
14 | frameworks="QtCore QtNetwork QtGui QtXml QtSvg QtWidgets QtPrintSupport QtDBus"
15 |
16 | echo
17 | echo "I expect you to have already copied these frameworks from the Qt installation to"
18 | echo "$app.app/Contents/Frameworks -- expect errors to follow if they're missing:"
19 | echo "$frameworks"
20 | echo
21 |
22 | echo "Fixing up loader paths in binaries..."
23 |
24 | for fwk in $frameworks; do
25 | install_name_tool -id $fwk "$app.app/Contents/Frameworks/$fwk"
26 | done
27 |
28 | find "$app.app" -name \*.dylib -print | while read x; do
29 | install_name_tool -id "`basename \"$x\"`" "$x"
30 | done
31 |
32 | for fwk in $frameworks; do
33 | find "$app.app" -type f -print | while read x; do
34 | if [ -x "$x" ]; then
35 | current=$(otool -L "$x" | grep "$fwk" | grep amework | grep -v ':$' | awk '{ print $1; }')
36 | [ -z "$current" ] && continue
37 | echo "$x has $current"
38 | relative=$(echo "$x" | sed -e "s,$app.app/Contents/,," \
39 | -e 's,[^/]*/,../,g' \
40 | -e 's,/[^/]*$,/Frameworks/'"$fwk"',' )
41 | echo "replacing with relative path $relative"
42 | install_name_tool -change "$current" "@loader_path/$relative" "$x"
43 | fi
44 | done
45 | done
46 |
47 | find "$app.app" -type f -print | while read x; do
48 | if [ -x "$x" ]; then
49 | qtdep=$(otool -L "$x" | grep Qt | grep amework | grep -v ':$' | grep -v '@loader_path' | awk '{ print $1; }')
50 | if [ -n "$qtdep" ]; then
51 | echo
52 | echo "ERROR: File $x depends on Qt framework(s) not apparently present in the bundle:"
53 | echo $qtdep
54 | exit 1
55 | fi
56 | fi
57 | done
58 |
59 | echo "Done: be sure to run the app and see that it works!"
60 |
61 |
62 |
--------------------------------------------------------------------------------
/deploy/linux/docker/Dockerfile_deb.in:
--------------------------------------------------------------------------------
1 | FROM ubuntu:14.04
2 | MAINTAINER Chris Cannam
3 | RUN apt-get update && \
4 | apt-get install -y \
5 | software-properties-common \
6 | build-essential \
7 | libbz2-dev \
8 | libfftw3-dev \
9 | libfishsound1-dev \
10 | libid3tag0-dev \
11 | liblo-dev \
12 | liblrdf0-dev \
13 | libmad0-dev \
14 | liboggz2-dev \
15 | libopus-dev \
16 | libopusfile-dev \
17 | libpulse-dev \
18 | libasound2-dev \
19 | libjack-dev \
20 | libsamplerate-dev \
21 | libsndfile-dev \
22 | libsord-dev \
23 | libxml2-utils \
24 | libboost-all-dev \
25 | libgl1-mesa-dev \
26 | raptor-utils \
27 | librubberband-dev \
28 | portaudio19-dev \
29 | qt5-default libqt5svg5-dev \
30 | git \
31 | mercurial \
32 | curl wget \
33 | mlton \
34 | autoconf automake libtool lintian
35 |
36 | RUN apt-get clean && rm -rf /var/lib/apt/lists/*
37 |
38 | RUN locale-gen en_US.UTF-8
39 | ENV LANG en_US.UTF-8
40 | ENV LANGUAGE en_US:en
41 | ENV LC_ALL en_US.UTF-8
42 |
43 | RUN hg clone -r[[REVISION]] https://code.soundsoftware.ac.uk/hg/sonic-lineup
44 |
45 | RUN git clone https://github.com/sandstorm-io/capnproto
46 | WORKDIR capnproto
47 | RUN git checkout v0.6.1
48 | WORKDIR c++
49 | RUN autoreconf -i && ./configure --enable-shared=no --enable-static=yes && make -j3 && make install
50 |
51 | WORKDIR /root
52 |
53 | COPY id_rsa_build .ssh/id_rsa_build
54 | COPY known_hosts .ssh/known_hosts
55 | RUN chmod 600 .ssh/id_rsa_build .ssh/known_hosts
56 | RUN echo '{"accounts": {"sourcehut": "~breakfastquay"}}' > .repoint.json
57 | RUN ( echo '[ui]' ; echo 'ssh = ssh -i /root/.ssh/id_rsa_build' ) > .hgrc
58 |
59 | RUN rm -f /usr/lib/x86_64-linux-gnu/librubberband.so*
60 |
61 | WORKDIR /sonic-lineup
62 | RUN ./configure
63 | RUN make -j3
64 |
65 | RUN deploy/linux/deploy-deb.sh [[RELEASE]] amd64
66 | RUN tar cvf output-deb.tar *.deb && cp output-deb.tar ..
67 |
--------------------------------------------------------------------------------
/deploy/linux/deploy-deb.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Run this from the build root (with sudo, I think)
4 |
5 | usage() {
6 | echo
7 | echo "Usage:"
8 | echo
9 | echo "$0 "
10 | echo
11 | echo "For example: $0 2.4cc1-1 amd64"
12 | echo
13 | exit 2
14 | }
15 |
16 | version="$1"
17 | arch="$2"
18 |
19 | if [ -z "$version" ] || [ -z "$arch" ]; then
20 | usage
21 | fi
22 |
23 | set -eu
24 |
25 | program=sonic-lineup
26 | checker=vamp-plugin-load-checker
27 | plugins="azi match-vamp-plugin nnls-chroma pyin qm-vamp-plugins tuning-difference"
28 |
29 | depdir=deploy/linux
30 |
31 | targetdir="${program}_${version}_${arch}"
32 |
33 | echo "Target dir is $targetdir"
34 |
35 | if [ -d "$targetdir" ]; then
36 | echo "Target directory exists, not overwriting"
37 | exit
38 | fi
39 |
40 | mkdir "$targetdir"
41 |
42 | cp -r "$depdir"/deb-skeleton/* "$targetdir"/
43 |
44 | mkdir -p "$targetdir"/usr/bin
45 | mkdir -p "$targetdir"/usr/lib/"$program"
46 | mkdir -p "$targetdir"/usr/share/pixmaps
47 |
48 | cp "$program" "$targetdir"/usr/bin/
49 |
50 | cp "$checker" "$targetdir"/usr/lib/"$program"/
51 |
52 | for p in $plugins ; do
53 | cp "$p.so" "$targetdir"/usr/lib/"$program"/
54 | done
55 |
56 | cp icons/"$program"-icon.svg "$targetdir"/usr/share/pixmaps/
57 | cp icons/"$program"-icon-128x128.png "$targetdir"/usr/share/pixmaps/"$program"-icon.png
58 | cp "$program".desktop "$targetdir"/usr/share/applications/
59 | cp README.md "$targetdir"/usr/share/doc/"$program"/
60 |
61 | perl -i -p -e "s/Architecture: .*/Architecture: $arch/" "$targetdir"/DEBIAN/control
62 |
63 | deps=`bash "$depdir"/debian-dependencies.sh "$program"`
64 |
65 | perl -i -p -e "s/Depends: .*/$deps/" "$targetdir"/DEBIAN/control
66 |
67 | control_ver=${version%-?}
68 |
69 | perl -i -p -e "s/Version: .*/Version: $control_ver/" "$targetdir"/DEBIAN/control
70 |
71 | bash "$depdir"/fix-lintian-bits.sh "$targetdir"
72 |
73 | dpkg-deb --build "$targetdir" && lintian "$targetdir".deb
74 |
75 |
--------------------------------------------------------------------------------
/deploy/osx/deploy-and-package.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | notarize=yes
6 | if [ "$1" = "--no-notarization" ]; then
7 | notarize=no
8 | elif [ -n "$1" ]; then
9 | echo "Usage: $0 [--no-notarization]"
10 | exit 2
11 | fi
12 |
13 | set -u
14 |
15 | app="Sonic Lineup"
16 |
17 | version=`perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h`
18 |
19 | source="$app.app"
20 | volume="$app"-"$version"
21 | target="$volume"/"$app".app
22 | dmg="$volume".dmg
23 |
24 | if [ -d "$volume" ]; then
25 | echo "Target directory $volume already exists, not overwriting"
26 | exit 2
27 | fi
28 |
29 | if [ -f "$dmg" ]; then
30 | echo "Target disc image $dmg already exists, not overwriting"
31 | exit 2
32 | fi
33 |
34 | if [ "$notarize" = no ]; then
35 | echo
36 | echo "Note: The --no-notarization flag is set: won't be submitting for notarization"
37 | fi
38 |
39 | echo
40 | echo "(Re-)running deploy script..."
41 |
42 | deploy/osx/deploy.sh "$app" || exit 1
43 |
44 | echo
45 | echo "Making target tree."
46 |
47 | mkdir "$volume" || exit 1
48 |
49 | ln -s /Applications "$volume"/Applications
50 | cp README.md "$volume/README.txt"
51 | cp COPYING "$volume/COPYING.txt"
52 | cp CHANGELOG "$volume/CHANGELOG.txt"
53 | cp -rp "$source" "$target"
54 |
55 | # update file timestamps so as to make the build date apparent
56 | find "$volume" -exec touch \{\} \;
57 |
58 | echo "Done"
59 |
60 | echo
61 | echo "Code-signing volume..."
62 |
63 | deploy/osx/sign.sh "$volume" || exit 1
64 |
65 | echo "Done"
66 |
67 | echo
68 | echo "Making dmg..."
69 |
70 | hdiutil create -srcfolder "$volume" "$dmg" -volname "$volume" -fs HFS+ &&
71 | rm -r "$volume"
72 |
73 | echo
74 | echo "Signing dmg..."
75 |
76 | codesign -s "Developer ID Application: Chris Cannam" -fv "$dmg"
77 |
78 | if [ "$notarize" = no ]; then
79 | echo
80 | echo "The --no-notarization flag was set: not submitting for notarization"
81 | else
82 | echo
83 | echo "Submitting dmg for notarization..."
84 |
85 | deploy/osx/notarize.sh "$dmg" || exit 1
86 | fi
87 |
88 | echo "Done"
89 |
--------------------------------------------------------------------------------
/deploy/linux/docker/Dockerfile_appimage.in:
--------------------------------------------------------------------------------
1 | FROM ubuntu:14.04
2 | MAINTAINER Chris Cannam
3 | RUN apt-get update && \
4 | apt-get install -y \
5 | software-properties-common \
6 | build-essential \
7 | libbz2-dev \
8 | libfftw3-dev \
9 | libfishsound1-dev \
10 | libid3tag0-dev \
11 | liblo-dev \
12 | liblrdf0-dev \
13 | libmad0-dev \
14 | liboggz2-dev \
15 | libopus-dev \
16 | libopusfile-dev \
17 | libpulse-dev \
18 | libasound2-dev \
19 | libjack-dev \
20 | libsamplerate-dev \
21 | libsndfile-dev \
22 | libsord-dev \
23 | libxml2-utils \
24 | libboost-all-dev \
25 | libgl1-mesa-dev \
26 | raptor-utils \
27 | librubberband-dev \
28 | git \
29 | mercurial \
30 | curl wget \
31 | mlton \
32 | autoconf automake libtool lintian
33 |
34 | # NB we do not install portaudio. We don't want to end up including it
35 | # in the bundle, because it comes with a dependency on the JACK
36 | # library which we don't want to bundle and can't assume people will
37 | # have. However, we do install JACK because the Dynamic JACK mechanism
38 | # should ensure we can detect, configure, and use that without
39 | # actually linking against it. We also have Pulse as the default I/O.
40 |
41 | RUN apt-add-repository -y ppa:beineri/opt-qt-5.10.1-trusty
42 | RUN apt-get update && \
43 | apt-get install -y \
44 | qt510base \
45 | qt510svg
46 | RUN apt-get clean && rm -rf /var/lib/apt/lists/*
47 |
48 | RUN locale-gen en_US.UTF-8
49 | ENV LANG en_US.UTF-8
50 | ENV LANGUAGE en_US:en
51 | ENV LC_ALL en_US.UTF-8
52 |
53 | RUN hg clone -r[[REVISION]] https://code.soundsoftware.ac.uk/hg/sonic-lineup
54 |
55 | RUN git clone https://github.com/sandstorm-io/capnproto
56 | WORKDIR capnproto
57 | RUN git checkout v0.6.1
58 | WORKDIR c++
59 | RUN autoreconf -i && ./configure && make -j3 && make install
60 |
61 | WORKDIR /root
62 |
63 | COPY id_rsa_build .ssh/id_rsa_build
64 | COPY known_hosts .ssh/known_hosts
65 | RUN chmod 600 .ssh/id_rsa_build .ssh/known_hosts
66 | RUN echo '{"accounts": {"sourcehut": "~breakfastquay"}}' > .repoint.json
67 | RUN ( echo '[ui]' ; echo 'ssh = ssh -i /root/.ssh/id_rsa_build' ) > .hgrc
68 |
69 | WORKDIR /sonic-lineup
70 | ENV QTDIR /opt/qt510
71 | ENV PATH /opt/qt510/bin:$PATH
72 | RUN ./configure
73 | RUN make -j3
74 |
75 | RUN deploy/linux/deploy-appimage.sh
76 | RUN tar cvf output-appimage.tar *.AppImage && cp output-appimage.tar ..
77 |
--------------------------------------------------------------------------------
/deploy/win64/build-64.bat:
--------------------------------------------------------------------------------
1 | rem Run this from within the top-level SV dir: deploy\win64\build-64.bat
2 | rem To build from clean, delete the folder build_win64 first
3 |
4 | echo on
5 |
6 | set STARTPWD=%CD%
7 |
8 | set QTDIR=C:\Qt\5.13.2\msvc2017_64
9 | if not exist %QTDIR% (
10 | @ echo Could not find 64-bit Qt in %QTDIR%
11 | @ exit /b 2
12 | )
13 |
14 | set vcvarsall="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat"
15 |
16 | if not exist %vcvarsall% (
17 | @ echo "Could not find MSVC vars batch file"
18 | @ exit /b 2
19 | )
20 |
21 | call %vcvarsall% amd64
22 |
23 | set ORIGINALPATH=%PATH%
24 | set PATH=%PATH%;C:\Program Files (x86)\SMLNJ\bin;%QTDIR%\bin
25 |
26 | cd %STARTPWD%
27 |
28 | call .\repoint install
29 | if %errorlevel% neq 0 exit /b %errorlevel%
30 |
31 | sv-dependency-builds\win64-msvc\bin\capnp -Isv-dependency-builds/win64-msvc/include compile --src-prefix=piper/capnp -osv-dependency-builds/win64-msvc/bin/capnpc-c++:piper-vamp-cpp/vamp-capnp piper/capnp/piper.capnp
32 | if %errorlevel% neq 0 exit /b %errorlevel%
33 |
34 | mkdir build_win64
35 | cd build_win64
36 |
37 | qmake -spec win32-msvc -r -tp vc ..\sonic-lineup.pro
38 | if %errorlevel% neq 0 exit /b %errorlevel%
39 |
40 | msbuild sonic-lineup.sln /t:Build /p:Configuration=Release
41 | if %errorlevel% neq 0 exit /b %errorlevel%
42 |
43 | copy .\checker\release\vamp-plugin-load-checker.exe .\release
44 |
45 | copy %QTDIR%\bin\Qt5Core.dll .\release
46 | copy %QTDIR%\bin\Qt5Gui.dll .\release
47 | copy %QTDIR%\bin\Qt5Widgets.dll .\release
48 | copy %QTDIR%\bin\Qt5Network.dll .\release
49 | copy %QTDIR%\bin\Qt5Xml.dll .\release
50 | copy %QTDIR%\bin\Qt5Svg.dll .\release
51 | copy %QTDIR%\bin\Qt5Test.dll .\release
52 | copy %QTDIR%\plugins\platforms\qminimal.dll .\release
53 | copy %QTDIR%\plugins\platforms\qwindows.dll .\release
54 | copy %QTDIR%\plugins\styles\qwindowsvistastyle.dll .\release
55 | copy ..\sv-dependency-builds\win64-msvc\lib\libsndfile-1.dll .\release
56 |
57 | rem some of these expect to be run from the project root
58 | cd ..
59 | build_win64\release\test-svcore-base
60 | if %errorlevel% neq 0 exit /b %errorlevel%
61 | build_win64\release\test-svcore-system
62 | if %errorlevel% neq 0 exit /b %errorlevel%
63 | build_win64\release\test-svcore-data-fileio
64 | if %errorlevel% neq 0 exit /b %errorlevel%
65 | build_win64\release\test-svcore-data-model
66 | if %errorlevel% neq 0 exit /b %errorlevel%
67 |
68 | set PATH=%ORIGINALPATH%
69 |
--------------------------------------------------------------------------------
/deploy/win64/build-and-package.bat:
--------------------------------------------------------------------------------
1 | rem Run this from within the top-level SV dir: deploy\win64\build-and-package.bat
2 |
3 | set STARTPWD=%CD%
4 |
5 | if not exist "C:\Program Files (x86)\SMLNJ\bin" (
6 | @ echo Could not find SML/NJ, required for Repoint
7 | @ exit /b 2
8 | )
9 |
10 | if not exist "C:\Program Files (x86)\WiX Toolset v3.11\bin" (
11 | @ echo Could not find WiX Toolset
12 | @ exit /b 2
13 | )
14 |
15 | powershell -NoProfile -ExecutionPolicy Bypass -Command "& 'deploy\win64\generate-wxs.ps1'"
16 | if errorlevel 1 exit /b %errorlevel%
17 |
18 | set ORIGINALPATH=%PATH%
19 | set PATH=C:\Program Files (x86)\Windows Kits\10\bin\x64;%PATH%
20 | set NAME=Open Source Developer, Christopher Cannam
21 |
22 | set ARG=%1
23 | shift
24 | if "%ARG%" == "sign" (
25 | @ echo NOTE: sign option specified, will attempt to codesign exe and msi
26 | @ echo NOTE: starting by codesigning an unrelated executable, so we know
27 | @ echo NOTE: whether it'll work before doing the entire build
28 | copy sv-dependency-builds\win64-msvc\bin\capnp.exe signtest.exe
29 | signtool sign /v /n "%NAME%" /t http://time.certum.pl /fd sha1 /a signtest.exe
30 | if errorlevel 1 exit /b %errorlevel%
31 | signtool verify /pa signtest.exe
32 | if errorlevel 1 exit /b %errorlevel%
33 | del signtest.exe
34 | @ echo NOTE: success
35 | ) else (
36 | @ echo NOTE: sign option not specified, will not codesign anything
37 | )
38 |
39 | @echo(
40 | @echo Rebuilding 64-bit
41 |
42 | cd %STARTPWD%
43 | del /q /s build_win64
44 | call .\deploy\win64\build-64.bat
45 | if %errorlevel% neq 0 exit /b %errorlevel%
46 |
47 | if "%ARG%" == "sign" (
48 | @echo Signing 64-bit executables and libraries
49 | signtool sign /v /n "%NAME%" /t http://time.certum.pl /fd sha1 /a build_win64\release\*.exe build_win64\release\*.dll
50 | )
51 |
52 | set PATH=%PATH%;"C:\Program Files (x86)\WiX Toolset v3.11\bin"
53 |
54 | @echo Packaging 64-bit
55 |
56 | cd %STARTPWD%\build_win64
57 | del sonic-lineup.msi
58 | candle -v ..\deploy\win64\sonic-lineup.wxs
59 | light -b . -ext WixUIExtension -ext WixUtilExtension -v sonic-lineup.wixobj
60 | if %errorlevel% neq 0 exit /b %errorlevel%
61 | del sonic-lineup.wixobj
62 | del sonic-lineup.wixpdb
63 |
64 | if "%ARG%" == "sign" (
65 | @echo Signing 64-bit package
66 | signtool sign /v /n "%NAME%" /t http://time.certum.pl /fd sha1 /a sonic-lineup.msi
67 | signtool verify /pa sonic-lineup.msi
68 | )
69 |
70 | set PATH=%ORIGINALPATH%
71 |
72 | cd %STARTPWD%
73 | @echo Done
74 |
75 |
--------------------------------------------------------------------------------
/deploy/osx/deploy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | # Execute this from the top-level directory of the project (the one
6 | # that contains the .app bundle). Supply the name of the application
7 | # as argument.
8 | #
9 | # This now performs *only* the app deployment step - copying in
10 | # libraries and setting up paths etc. It does not create a
11 | # package. Use deploy-and-package.sh for that.
12 |
13 | app="$1"
14 | source="$app.app"
15 |
16 | if [ -z "$app" ] || [ ! -d "$source" ] || [ -n "$2" ]; then
17 | echo "Usage: $0 "
18 | echo " e.g. $0 MyApplication"
19 | echo " The app bundle must exist in ./.app."
20 | echo " Version number will be extracted from version.h."
21 | exit 2
22 | fi
23 |
24 | set -u
25 |
26 | version=`perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h`
27 | stem=${version%%-*}
28 | stem=${stem%%pre*}
29 | case "$stem" in
30 | [0-9].[0-9]) bundleVersion="$stem".0 ;;
31 | [0-9].[0-9].[0-9]) bundleVersion="$stem" ;;
32 | *) echo "Error: Version stem $stem (of version $version) is neither two- nor three-part number" ;;
33 | esac
34 |
35 | echo
36 | echo "Copying in Vamp plugins."
37 |
38 | for plugin in azi match-vamp-plugin nnls-chroma pyin qm-vamp-plugins tuning-difference ; do
39 | cp "$plugin.dylib" "$source/Contents/Resources/"
40 | done
41 |
42 | echo
43 | echo "Copying in frameworks and plugins from Qt installation directory."
44 |
45 | deploy/osx/copy-qt.sh "$app" || exit 2
46 |
47 | echo
48 | echo "Fixing up paths."
49 |
50 | deploy/osx/paths.sh "$app"
51 |
52 | echo
53 | echo "Copying in qt.conf to set local-only plugin paths."
54 | echo "Make sure all necessary Qt plugins are in $source/Contents/plugins/*"
55 | echo "You probably want platforms/, accessible/ and imageformats/ subdirectories."
56 | cp deploy/osx/qt.conf "$source"/Contents/Resources/qt.conf
57 |
58 | echo
59 | echo "Copying in plugin load checker."
60 | cp checker/vamp-plugin-load-checker "$source"/Contents/MacOS/
61 |
62 | echo
63 | echo "Copying in plugin server."
64 | cp piper-vamp-simple-server "$source"/Contents/MacOS/
65 |
66 | echo
67 | echo "Copying in lproj directories containing InfoPlist.strings translation files."
68 | cp -r i18n/*.lproj "$source"/Contents/Resources/
69 |
70 | echo
71 | echo "Writing version $bundleVersion in to bundle."
72 | echo "(This should be a three-part number: major.minor.point)"
73 |
74 | perl -p -e "s/VECT_VERSION/$bundleVersion/" deploy/osx/Info.plist \
75 | > "$source"/Contents/Info.plist
76 |
77 | echo "Done: check $source/Contents/Info.plist for sanity please"
78 |
79 | echo "Done"
80 |
--------------------------------------------------------------------------------
/CHANGELOG:
--------------------------------------------------------------------------------
1 |
2 | Changes in Sonic Lineup v1.1 (18 Aug 2020) since the previous release 1.1:
3 |
4 | - Add an Alignment menu allowing you to choose one of a set of
5 | alignment methods, including new sung-notes alignment and an option
6 | for an external program that you supply
7 |
8 | - Add a subsequence alignment option for cases where the "other"
9 | tracks represent only fragments of the "reference"
10 |
11 | - Improve display of alignment views in cases where two adjacent
12 | tracks overlap each other in time only partially or not at all
13 |
14 | - Improve selection of font sizes and pane sizing, especially when
15 | many tracks are loaded
16 |
17 | - Speed up re-opening the application with many tracks in session
18 |
19 | - If alignment fails for all tracks because of some external factor,
20 | show the failure report dialog once only instead of for every track
21 |
22 |
23 | Changes in Sonic Lineup v1.0.1 (10 Dec 2019) since the previous release 1.0:
24 |
25 | - Fix salient features disappearing as the view scrolls
26 |
27 | - Fix failure to open playback device when using macOS Catalina with
28 | certain audio devices
29 |
30 | - Remove dependency on JACK in Linux deb package: the application can
31 | use it if available, but it isn't required
32 |
33 | - Fix failure to make installed executables executable when
34 | installing from the source package
35 |
36 |
37 | Changes in Sonic Lineup v1.0 (25 Oct 2019) since the previous release 0.3:
38 |
39 | - Add ghost reference trace to Sung Pitch view for comparison with
40 | pitch of reference
41 |
42 | - Add first-run explainer dialog
43 |
44 | - Improve rendering of alignment views between panes
45 |
46 | - Fix performance problem when switching to spectrogram mode with
47 | numerous tracks open, especially on Windows
48 |
49 | - Merge major and minor key plots, because of lack of vertical space
50 |
51 | - Fix problems with presentation and alignment of vertical scales
52 |
53 | - Fix ffwd/rewind which could get stuck when used in aligned views
54 |
55 | - Fix incorrect waveform type selection when switching modes, and
56 | ensure outline waveform always uses the same waveform configuration
57 |
58 | - Fix a number of crashes and thread-safety issues
59 |
60 | - Fix sluggishness in starting and stopping playback when using
61 | PulseAudio v13.0+
62 |
63 |
64 | Changes in Sonic Lineup v0.3 (14 June 2019):
65 |
66 | - First public release
67 |
68 | - First build under this name
69 |
70 |
--------------------------------------------------------------------------------
/i18n/tips_en.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 | Welcome to Sonic Visualiser!
Sonic Visualiser is a
10 | complex application, but it's easy enough to get started with.
11 | Try importing an audio file and using the Pane menu to add some
12 | different views of it.
Check out the links on the Help menu for
13 | tutorials and other documentation!
14 |
15 |
16 |
17 |
18 | Sonic Visualiser's window is organised into "panes" and
19 | "layers". To begin with, you have one pane. Import an audio
20 | file to see it displayed in a waveform layer on that pane.
21 |
22 |
23 |
24 |
25 | Each pane can contain any number of layers, which appear stacked
26 | from "front" to "back" on the same timeline. A layer can contain a
27 | view of audio, or of points (time instants) or data plots (time-values).
28 |
29 |
30 |
31 |
32 | There's a "layer property box" to the right of each pane, with one
33 | tab for each of the layers on that pane. Click on a layer's tab to
34 | bring that layer to the front. You can then adjust its colour and
35 | other display properties in the property box.
36 |
37 | The first tab is always for the pane itself, which has a few
38 | adjustable properties of its own.
39 |
40 |
41 |
42 |
43 | If you have more than one pane, only one of them will be "current",
44 | marked with a black bar at the left side. Just click on another pane
45 | to make it current. Most editing operations affect the layer that's
46 | at the front of the current pane.
47 |
48 |
49 |
50 |
51 | You can use different zoom levels for different panes by un-checking
52 | the Global Zoom control for one of them. By default, all panes will
53 | zoom and scroll together.
54 |
55 |
56 |
57 |
58 | You can speed up and slow down playback using the Playback Speedup
59 | control in the bottom-right of the window.
60 |
61 |
62 |
63 |
64 | The Transforms menu lists things you can do to extract features from
65 | or process your audio. The available outputs of any Vamp
66 | feature-extraction plugins or LADSPA audio effects plugins you have
67 | will show up here.
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/deploy/win64/build-64-debug.bat:
--------------------------------------------------------------------------------
1 | rem Run this from within the top-level SV dir: deploy\win64\build-64.bat
2 | rem To build from clean, delete the folder build_win64_debug first
3 |
4 | rem NB you will probably also have to change the CONFIG in noconfig.pri
5 | rem from release to debug
6 |
7 | echo on
8 |
9 | set STARTPWD=%CD%
10 |
11 | set QTDIR=C:\Qt\5.13.0\msvc2017_64
12 | if not exist %QTDIR% (
13 | @ echo Could not find 64-bit Qt
14 | @ exit /b 2
15 | )
16 |
17 | if not exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" (
18 | @ echo "Could not find MSVC vars batch file"
19 | @ exit /b 2
20 | )
21 |
22 | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
23 |
24 | set ORIGINALPATH=%PATH%
25 | set PATH=%PATH%;C:\Program Files (x86)\SMLNJ\bin;%QTDIR%\bin
26 |
27 | cd %STARTPWD%
28 |
29 | call .\repoint install
30 | if %errorlevel% neq 0 exit /b %errorlevel%
31 |
32 | sv-dependency-builds\win64-msvc\bin\capnp -Isv-dependency-builds/win64-msvc/include compile --src-prefix=piper/capnp -osv-dependency-builds/win64-msvc/bin/capnpc-c++:piper-vamp-cpp/vamp-capnp piper/capnp/piper.capnp
33 | if %errorlevel% neq 0 exit /b %errorlevel%
34 |
35 | mkdir build_win64_debug
36 | cd build_win64_debug
37 |
38 | qmake -spec win32-msvc -r -tp vc ..\sonic-lineup.pro
39 | if %errorlevel% neq 0 exit /b %errorlevel%
40 |
41 | msbuild sonic-lineup.sln /t:Build /p:Configuration=Debug
42 | if %errorlevel% neq 0 exit /b %errorlevel%
43 |
44 | copy .\checker\debug\vamp-plugin-load-checker.exe .\debug
45 |
46 | copy %QTDIR%\bin\Qt5Cored.dll .\debug
47 | copy %QTDIR%\bin\Qt5Guid.dll .\debug
48 | copy %QTDIR%\bin\Qt5Widgetsd.dll .\debug
49 | copy %QTDIR%\bin\Qt5Networkd.dll .\debug
50 | copy %QTDIR%\bin\Qt5Xmld.dll .\debug
51 | copy %QTDIR%\bin\Qt5Svgd.dll .\debug
52 | copy %QTDIR%\bin\Qt5Testd.dll .\debug
53 | copy %QTDIR%\plugins\platforms\qminimald.dll .\debug
54 | copy %QTDIR%\plugins\platforms\qwindowsd.dll .\debug
55 | copy %QTDIR%\plugins\styles\qwindowsvistastyled.dll .\debug
56 | copy ..\sv-dependency-builds\win64-msvc\lib\libsndfile-1.dll .\debug
57 |
58 | rem some of these expect to be run from the project root
59 | cd ..
60 | build_win64_debug\debug\test-svcore-base
61 | if %errorlevel% neq 0 exit /b %errorlevel%
62 | build_win64_debug\debug\test-svcore-system
63 | if %errorlevel% neq 0 exit /b %errorlevel%
64 | build_win64_debug\debug\test-svcore-data-fileio
65 | if %errorlevel% neq 0 exit /b %errorlevel%
66 | build_win64_debug\debug\test-svcore-data-model
67 | if %errorlevel% neq 0 exit /b %errorlevel%
68 |
69 | set PATH=%ORIGINALPATH%
70 |
--------------------------------------------------------------------------------
/vectapp.pro:
--------------------------------------------------------------------------------
1 |
2 | TEMPLATE = app
3 |
4 | exists(config.pri) {
5 | include(config.pri)
6 | }
7 |
8 | !exists(config.pri) {
9 | include(noconfig.pri)
10 | }
11 |
12 | include(base.pri)
13 |
14 | QT += network xml gui widgets svg
15 |
16 | TARGET = "Sonic Lineup"
17 | linux*:TARGET = sonic-lineup
18 | solaris*:TARGET = sonic-lineup
19 |
20 | !win32 {
21 | PRE_TARGETDEPS += $$PWD/libbase.a
22 | }
23 |
24 | linux* {
25 |
26 | vect_bins.path = $$PREFIX_PATH/bin/
27 | vect_bins.files = sonic-lineup
28 | vect_bins.CONFIG = no_check_exist executable
29 |
30 | vect_support.path = $$PREFIX_PATH/lib/sonic-lineup/
31 | vect_support.files = checker/vamp-plugin-load-checker azi.so match-vamp-plugin.so nnls-chroma.so pyin.so qm-vamp-plugins.so tuning-difference.so
32 | vect_support.CONFIG = no_check_exist executable
33 |
34 | vect_desktop.path = $$PREFIX_PATH/share/applications/
35 | vect_desktop.files = sonic-lineup.desktop
36 | vect_desktop.CONFIG = no_check_exist
37 |
38 | vect_icon.path = $$PREFIX_PATH/share/icons/hicolor/scalable/apps/
39 | vect_icon.files = icons/sonic-lineup-icon.svg
40 | vect_icon.CONFIG = no_check_exist
41 |
42 | INSTALLS += vect_bins vect_support vect_desktop vect_icon
43 | }
44 |
45 | TRANSLATIONS += \
46 | i18n/vect_ru.ts \
47 | i18n/vect_en_GB.ts \
48 | i18n/vect_en_US.ts \
49 | i18n/vect_cs_CZ.ts
50 |
51 | OBJECTS_DIR = o
52 | MOC_DIR = o
53 |
54 | ICON = icons/sonic-lineup-icon.icns
55 | RC_FILE = icons/sonic-lineup.rc
56 |
57 | RESOURCES += sonic-lineup.qrc
58 |
59 | # Mac integration
60 | QMAKE_INFO_PLIST = deploy/osx/Info.plist
61 |
62 | include(svgui/files.pri)
63 | include(svapp/files.pri)
64 |
65 | for (file, SVGUI_SOURCES) { SOURCES += $$sprintf("svgui/%1", $$file) }
66 | for (file, SVAPP_SOURCES) { SOURCES += $$sprintf("svapp/%1", $$file) }
67 |
68 | for (file, SVGUI_HEADERS) { HEADERS += $$sprintf("svgui/%1", $$file) }
69 | for (file, SVAPP_HEADERS) { HEADERS += $$sprintf("svapp/%1", $$file) }
70 |
71 | HEADERS += \
72 | main/IntroDialog.h \
73 | main/MainWindow.h \
74 | main/NetworkPermissionTester.h \
75 | main/PreferencesDialog.h \
76 | main/SmallSession.h
77 |
78 | SOURCES += \
79 | main/IntroDialog.cpp \
80 | main/main.cpp \
81 | main/MainWindow.cpp \
82 | main/NetworkPermissionTester.cpp \
83 | main/PreferencesDialog.cpp \
84 | main/SmallSession.cpp
85 |
86 | win32-msvc* {
87 | LIBS += -los
88 | }
89 |
90 | macx* {
91 | QMAKE_POST_LINK += cp checker/vamp-plugin-load-checker . && deploy/osx/deploy.sh $$shell_quote(Sonic Lineup)
92 | }
93 |
94 | linux {
95 | QMAKE_POST_LINK += cp checker/vamp-plugin-load-checker .
96 | }
97 |
98 |
--------------------------------------------------------------------------------
/main/NetworkPermissionTester.cpp:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #include "NetworkPermissionTester.h"
16 |
17 | #include "../version.h"
18 |
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | bool
30 | NetworkPermissionTester::havePermission()
31 | {
32 | QSettings settings;
33 | settings.beginGroup("Preferences");
34 |
35 | QString tag = QString("network-permission-%1").arg(VECT_VERSION);
36 |
37 | bool permish = false;
38 |
39 | if (settings.contains(tag)) {
40 | permish = settings.value(tag, false).toBool();
41 | } else {
42 |
43 | QDialog d;
44 | d.setWindowTitle(QCoreApplication::translate
45 | ("NetworkPermissionTester",
46 | "Sonic Lineup"));
47 |
48 | QGridLayout *layout = new QGridLayout;
49 | d.setLayout(layout);
50 |
51 | QLabel *label = new QLabel;
52 | label->setWordWrap(true);
53 | label->setText
54 | (QCoreApplication::translate
55 | ("NetworkPermissionTester",
56 | "
Welcome to Sonic Lineup!
"
57 | "Sonic Lineup is a program for comparative visualisation and alignment of groups of related audio recordings.
"
58 | "Developed in the Centre for Digital Music at Queen Mary, University of London, Sonic Lineup is open source software under the GNU General Public License.
"
59 | "
"
60 | "Before we go on...
"
61 | "Sonic Lineup would like to make occasional network requests, to check for updates."
62 | "
No personal information will be sent, no tracking is carried out, and no information will be shared with anyone else.
"
63 | "We recommend that you allow this, because it makes Sonic Lineup more useful to you. But if you do not wish to do so, please un-check the box below.
"));
64 | layout->addWidget(label, 0, 0);
65 |
66 | QCheckBox *cb = new QCheckBox(QCoreApplication::translate("NetworkPermissionTester", "Allow this"));
67 | cb->setChecked(true);
68 | layout->addWidget(cb, 1, 0);
69 |
70 | QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok);
71 | QObject::connect(bb, SIGNAL(accepted()), &d, SLOT(accept()));
72 | layout->addWidget(bb, 2, 0);
73 |
74 | d.exec();
75 |
76 | permish = cb->isChecked();
77 | settings.setValue(tag, permish);
78 | }
79 |
80 | settings.endGroup();
81 |
82 | return permish;
83 | }
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/repoint.ps1:
--------------------------------------------------------------------------------
1 | <#
2 |
3 | .SYNOPSIS
4 | A simple manager for third-party source code dependencies.
5 | Run "repoint help" for more documentation.
6 |
7 | #>
8 |
9 | Set-StrictMode -Version 2.0
10 | $ErrorActionPreference = "Stop"
11 | $env:HGPLAIN = "true"
12 |
13 | $sml = $env:REPOINT_SML
14 |
15 | $mydir = Split-Path $MyInvocation.MyCommand.Path -Parent
16 | $program = "$mydir/repoint.sml"
17 |
18 | # We need either Poly/ML or SML/NJ. No great preference as to which.
19 |
20 | # Typical locations
21 | $env:PATH = "$env:PATH;C:\Program Files (x86)\SMLNJ\bin;C:\Program Files\Poly ML;C:\Program Files (x86)\Poly ML"
22 |
23 | if (!$sml) {
24 | if (Get-Command "sml" -ErrorAction SilentlyContinue) {
25 | $sml = "smlnj"
26 | } elseif (Get-Command "polyml" -ErrorAction SilentlyContinue) {
27 | $sml = "poly"
28 | } else {
29 | echo @"
30 |
31 | ERROR: No supported SML compiler or interpreter found
32 |
33 | The Repoint external source code manager needs a Standard ML (SML)
34 | compiler or interpreter to run.
35 |
36 | Please ensure you have one of the following SML implementations
37 | installed and present in your PATH, and try again.
38 |
39 | 1. Standard ML of New Jersey
40 | - executable name: sml
41 |
42 | 2. Poly/ML
43 | - executable name: polyml
44 |
45 | "@
46 | exit 1
47 | }
48 | }
49 |
50 | if ($args -match "'""") {
51 | $arglist = '["usage"]'
52 | } else {
53 | $arglist = '["' + ($args -join '","') + '"]'
54 | }
55 |
56 | if ($sml -eq "poly") {
57 |
58 | $program = $program -replace "\\","\\\\"
59 | echo "use ""$program""; repoint $arglist" | polyml -q --error-exit | Out-Host
60 |
61 | if (-not $?) {
62 | exit $LastExitCode
63 | }
64 |
65 | } elseif ($sml -eq "smlnj") {
66 |
67 | $lines = @(Get-Content $program)
68 | $lines = $lines -notmatch "val _ = main ()"
69 |
70 | $intro = @"
71 | val smlrun__cp =
72 | let val x = !Control.Print.out in
73 | Control.Print.out := { say = fn _ => (), flush = fn () => () };
74 | x
75 | end;
76 | val smlrun__prev = ref "";
77 | Control.Print.out := {
78 | say = fn s =>
79 | (if String.isSubstring "Error" s orelse String.isSubstring "Fail" s
80 | then (Control.Print.out := smlrun__cp;
81 | (#say smlrun__cp) (!smlrun__prev);
82 | (#say smlrun__cp) s)
83 | else (smlrun__prev := s; ())),
84 | flush = fn s => ()
85 | };
86 | "@ -split "[\r\n]+"
87 |
88 | $outro = @"
89 | val _ = repoint $arglist;
90 | val _ = OS.Process.exit (OS.Process.success);
91 | "@ -split "[\r\n]+"
92 |
93 | $script = @()
94 | $script += $intro
95 | $script += $lines
96 | $script += $outro
97 |
98 | $tmpfile = ([System.IO.Path]::GetTempFileName()) -replace "[.]tmp",".sml"
99 |
100 | $script | Out-File -Encoding "ASCII" $tmpfile
101 |
102 | $env:CM_VERBOSE="false"
103 |
104 | sml $tmpfile
105 |
106 | if (-not $?) {
107 | del $tmpfile
108 | exit $LastExitCode
109 | }
110 |
111 | del $tmpfile
112 |
113 | } else {
114 |
115 | "Unknown SML implementation name: $sml"
116 | exit 2
117 | }
118 |
--------------------------------------------------------------------------------
/deploy/linux/deploy-appimage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eu
4 |
5 | program=sonic-lineup
6 | checker=vamp-plugin-load-checker
7 | plugins="azi match-vamp-plugin nnls-chroma pyin qm-vamp-plugins tuning-difference"
8 |
9 | get_id() {
10 | if [ -d .hg ]; then
11 | hg id | sed 's/[+ ].*$//'
12 | elif [ -d .git ]; then
13 | git rev-parse --short HEAD
14 | else
15 | echo "WARNING: can't figure out revision from VCS metadata" 1>&2
16 | echo "unknown"
17 | fi
18 | }
19 |
20 | version=$(get_id)
21 |
22 | targetdir="${program}.AppDir"
23 |
24 | echo "Target dir is $targetdir"
25 |
26 | if [ -d "$targetdir" ]; then
27 | echo "Target directory exists, not overwriting"
28 | exit
29 | fi
30 |
31 | mkdir "$targetdir"
32 |
33 | mkdir -p "$targetdir"/usr/bin
34 | mkdir -p "$targetdir"/usr/lib/"$program"
35 |
36 | cp "$program" "$targetdir"/usr/bin/
37 | cp "$checker" "$targetdir"/usr/lib/"$program"/
38 |
39 | for p in $plugins ; do
40 | cp "$p.so" "$targetdir"/usr/lib/"$program"/
41 | done
42 |
43 | ldd /usr/lib/x86_64-linux-gnu/libpulse.so.0 || true
44 |
45 | add_dependencies() {
46 |
47 | local binary="$1"
48 |
49 | echo "ldd $binary yields:"
50 | ldd "$binary"
51 |
52 | for lib in $(ldd "$binary" | grep '=> [^ ]*/lib/' | \
53 | sed 's/^.*=> //' | sed 's/ .*$//'); do
54 |
55 | base=$(basename "$lib")
56 | if grep -v '^#' sv-dependency-builds/linux/appimage/excludelist |
57 | grep -q "^$base$" ; then
58 | echo "excluding: $lib"
59 | continue
60 | fi
61 |
62 | target="$targetdir/usr/lib/$(basename $lib)"
63 |
64 | mkdir -p "$(dirname $target)"
65 |
66 | if [ ! -f "$target" ]; then
67 |
68 | cp -Lv "$lib" "$target"
69 | chmod +x "$target"
70 |
71 | add_dependencies "$lib"
72 |
73 | fi
74 | done
75 | }
76 |
77 | add_dependencies "$program"
78 | add_dependencies "$checker"
79 |
80 | for p in $plugins ; do
81 | add_dependencies "$p.so"
82 | done
83 |
84 | qtplugins="gif icns ico jpeg tga tiff wbmp webp cocoa minimal offscreen xcb"
85 | qtlibdirs="/usr/lib/x86_64-linux-gnu/qt5 /usr/lib/x86_64-linux-gnu/qt /usr/lib/qt5 /usr/lib/qt"
86 |
87 | QTDIR=${QTDIR:-}
88 | if [ -n "$QTDIR" ]; then
89 | qtlibdirs="$QTDIR $qtlibdirs"
90 | fi
91 |
92 | for plug in $qtplugins; do
93 | for libdir in $qtlibdirs; do
94 | lib=$(find $libdir/plugins -name libq$plug.so -print 2>/dev/null || true)
95 | if [ -n "$lib" ]; then
96 | if [ -f "$lib" ]; then
97 | subdir=$(basename $(dirname $lib))
98 | if [ t"$subdir" = t"plugins" ]; then
99 | subdir=""
100 | fi
101 | target="$targetdir/usr/lib/qt5/plugins/$subdir/$(basename $lib)"
102 | mkdir -p "$(dirname $target)"
103 | cp -v "$lib" "$target"
104 | chmod +x "$target"
105 | add_dependencies "$lib"
106 | break
107 | fi
108 | fi
109 | done
110 | done
111 |
112 | cp "$program.desktop" "$targetdir/"
113 |
114 | cp "icons/$program-icon.svg" "$targetdir/$program-icon.svg"
115 |
116 | cp "deploy/linux/AppRun" "$targetdir/"
117 |
118 | chmod +x "$targetdir/AppRun"
119 |
120 | # Do this with a separate extraction step, so as to make it work even
121 | # in situations where FUSE is unavailable like in a Docker container
122 | export ARCH=x86_64
123 | sv-dependency-builds/linux/appimage/appimagetool-x86_64.AppImage --appimage-extract
124 | ./squashfs-root/AppRun "$targetdir" "SonicLineup-$version-x86_64.AppImage"
125 |
126 |
--------------------------------------------------------------------------------
/repoint-project.json:
--------------------------------------------------------------------------------
1 | {
2 | "config": {
3 | "extdir": "."
4 | },
5 | "services": {
6 | "soundsoftware": {
7 | "vcs": ["hg", "git"],
8 | "anonymous": "https://code.soundsoftware.ac.uk/{vcs}/{repository}",
9 | "authenticated": "https://{account}@code.soundsoftware.ac.uk/{vcs}/{repository}"
10 | }
11 | },
12 | "libraries": {
13 | "vamp-plugin-sdk": {
14 | "vcs": "hg",
15 | "service": "soundsoftware"
16 | },
17 | "svcore": {
18 | "vcs": "hg",
19 | "service": "soundsoftware"
20 | },
21 | "svgui": {
22 | "vcs": "hg",
23 | "service": "soundsoftware"
24 | },
25 | "svapp": {
26 | "vcs": "hg",
27 | "service": "soundsoftware"
28 | },
29 | "checker": {
30 | "vcs": "hg",
31 | "service": "soundsoftware",
32 | "repository": "vamp-plugin-load-checker"
33 | },
34 | "piper": {
35 | "vcs": "git",
36 | "service": "github",
37 | "owner": "piper-audio"
38 | },
39 | "piper-vamp-cpp": {
40 | "vcs": "git",
41 | "service": "github",
42 | "owner": "piper-audio"
43 | },
44 | "dataquay": {
45 | "vcs": "hg",
46 | "service": "sourcehut",
47 | "owner": "breakfastquay"
48 | },
49 | "bqvec": {
50 | "vcs": "hg",
51 | "service": "sourcehut",
52 | "owner": "breakfastquay"
53 | },
54 | "bqfft": {
55 | "vcs": "hg",
56 | "service": "sourcehut",
57 | "owner": "breakfastquay"
58 | },
59 | "bqresample": {
60 | "vcs": "hg",
61 | "service": "sourcehut",
62 | "owner": "breakfastquay"
63 | },
64 | "bqaudioio": {
65 | "vcs": "hg",
66 | "service": "sourcehut",
67 | "owner": "breakfastquay"
68 | },
69 | "bqaudiostream": {
70 | "vcs": "hg",
71 | "service": "sourcehut",
72 | "owner": "breakfastquay"
73 | },
74 | "bqthingfactory": {
75 | "vcs": "hg",
76 | "service": "sourcehut",
77 | "owner": "breakfastquay"
78 | },
79 | "sv-dependency-builds": {
80 | "vcs": "hg",
81 | "service": "soundsoftware"
82 | },
83 | "icons/scalable": {
84 | "vcs": "hg",
85 | "service": "soundsoftware",
86 | "repository": "sv-iconset"
87 | },
88 | "match": {
89 | "vcs": "hg",
90 | "service": "soundsoftware",
91 | "repository": "match-vamp",
92 | "branch": "subsequence"
93 | },
94 | "constant-q-cpp": {
95 | "vcs": "git",
96 | "service": "github",
97 | "owner": "cannam",
98 | "repository": "constant-q-cpp"
99 | },
100 | "tuning-difference": {
101 | "vcs": "hg",
102 | "service": "soundsoftware"
103 | },
104 | "pyin": {
105 | "vcs": "hg",
106 | "service": "soundsoftware"
107 | },
108 | "nnls-chroma": {
109 | "vcs": "hg",
110 | "service": "soundsoftware"
111 | },
112 | "qm-vamp-plugins": {
113 | "vcs": "git",
114 | "service": "github",
115 | "owner": "c4dm"
116 | },
117 | "qm-vamp-plugins/lib/qm-dsp": {
118 | "vcs": "git",
119 | "service": "github",
120 | "owner": "c4dm"
121 | },
122 | "azi": {
123 | "vcs": "hg",
124 | "service": "soundsoftware"
125 | }
126 | }
127 | }
128 |
129 |
--------------------------------------------------------------------------------
/deploy/osx/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundlePackageType
6 | APPL
7 | CFBundleName
8 | Sonic Lineup
9 | CFBundleExecutable
10 | Sonic Lineup
11 | CFBundleIconFile
12 | sonic-lineup-icon.icns
13 | CFBundleIdentifier
14 | org.sonicvisualiser.SonicLineup
15 | CFBundleShortVersionString
16 | VECT_VERSION
17 |
18 |
21 | NSMicrophoneUsageDescription
22 | Sonic Lineup needs to use the microphone for recording.
23 |
24 |
25 | NSPrincipalClass
26 | NSApplication
27 | NSHighResolutionCapable
28 | True
29 |
30 | CFBundleDocumentTypes
31 |
32 |
33 |
34 | CFBundleTypeExtensions
35 |
36 | mp3
37 |
38 | CFBundleTypeMIMETypes
39 |
40 | audio/mpeg
41 |
42 | CFBundleTypeName
43 | MP3 Audio
44 | CFBundleTypeRole
45 | Viewer
46 | LSIsAppleDefaultForType
47 |
48 | LSHandlerRank
49 | Alternate
50 |
51 |
52 | CFBundleTypeExtensions
53 |
54 | ogg
55 | oga
56 |
57 | CFBundleTypeMIMETypes
58 |
59 | audio/ogg
60 |
61 | CFBundleTypeName
62 | Ogg Vorbis Audio
63 | CFBundleTypeRole
64 | Viewer
65 | LSIsAppleDefaultForType
66 |
67 | LSHandlerRank
68 | Alternate
69 |
70 |
71 | CFBundleTypeExtensions
72 |
73 | wav
74 |
75 | CFBundleTypeMIMETypes
76 |
77 | audio/x-wav
78 |
79 | CFBundleTypeName
80 | Wave Audio
81 | CFBundleTypeRole
82 | Viewer
83 | LSIsAppleDefaultForType
84 |
85 | LSHandlerRank
86 | Alternate
87 |
88 |
89 | CFBundleTypeExtensions
90 |
91 | aif
92 | aiff
93 |
94 | CFBundleTypeMIMETypes
95 |
96 | audio/x-aiff
97 |
98 | CFBundleTypeName
99 | AIFF Audio
100 | CFBundleTypeRole
101 | Viewer
102 | LSIsAppleDefaultForType
103 |
104 | LSHandlerRank
105 | Alternate
106 |
107 |
108 | CFBundleTypeExtensions
109 |
110 | flac
111 |
112 | CFBundleTypeMIMETypes
113 |
114 | audio/flac
115 |
116 | CFBundleTypeName
117 | FLAC Audio
118 | CFBundleTypeRole
119 | Viewer
120 | LSIsAppleDefaultForType
121 |
122 | LSHandlerRank
123 | Alternate
124 |
125 |
126 |
127 |
128 |
--------------------------------------------------------------------------------
/noconfig.pri:
--------------------------------------------------------------------------------
1 |
2 | win32-msvc* {
3 | # Necessary for WinRT header used to determine background colour
4 | CONFIG += c++17
5 | }
6 | !win32-msvc* {
7 | CONFIG += c++14
8 | }
9 |
10 | CONFIG += release
11 | #CONFIG += debug
12 |
13 | PREFIX_PATH = /usr/local
14 |
15 | DEFINES += NDEBUG BUILD_RELEASE
16 | DEFINES += NO_TIMING NO_HIT_COUNTS
17 |
18 | DEFINES += HAVE_PIPER HAVE_PLUGIN_CHECKER_HELPER
19 |
20 | # Full set of defines expected for all platforms when we have the
21 | # sv-dependency-builds subrepo available to provide the dependencies.
22 |
23 | DEFINES += \
24 | HAVE_BZ2 \
25 | HAVE_FFTW3 \
26 | HAVE_FFTW3F \
27 | HAVE_SNDFILE \
28 | HAVE_SAMPLERATE \
29 | HAVE_RUBBERBAND \
30 | HAVE_LIBLO \
31 | HAVE_MAD \
32 | HAVE_ID3TAG \
33 | HAVE_OPUS \
34 | HAVE_PORTAUDIO
35 |
36 | # Default set of libs for the above. Config sections below may update
37 | # these.
38 |
39 | LIBS += \
40 | -lbase \
41 | -lbz2 \
42 | -lrubberband \
43 | -lfftw3 \
44 | -lfftw3f \
45 | -lsndfile \
46 | -lFLAC \
47 | -logg \
48 | -lvorbis \
49 | -lvorbisenc \
50 | -lvorbisfile \
51 | -lopusfile \
52 | -lopus \
53 | -logg \
54 | -lmad \
55 | -lid3tag \
56 | -lportaudio \
57 | -lsamplerate \
58 | -lz \
59 | -lsord-0 \
60 | -lserd-0 \
61 | -llo \
62 | -lcapnp \
63 | -lkj
64 |
65 | win32-g++ {
66 |
67 | # This config is currently used for 32-bit Windows builds.
68 |
69 | INCLUDEPATH += $$PWD/sv-dependency-builds/win32-mingw/include $$PWD/sv-dependency-builds/win32-mingw/include/opus
70 |
71 | LIBS += -Lrelease -L$$PWD/sv-dependency-builds/win32-mingw/lib
72 |
73 | DEFINES += NOMINMAX _USE_MATH_DEFINES CAPNP_LITE
74 |
75 | QMAKE_CXXFLAGS_RELEASE += -ffast-math
76 |
77 | # Don't have liblo
78 | DEFINES -= HAVE_LIBLO
79 | LIBS -= -llo
80 |
81 | # (We don't have MediaFoundation support either, with this build sadly)
82 |
83 | LIBS += -lwinmm -lws2_32
84 | }
85 |
86 | win32-msvc* {
87 |
88 | # This config is actually used only for 64-bit Windows builds.
89 | # even though the qmake spec is still called win32-msvc*. If
90 | # we want to do 32-bit builds with MSVC as well, then we'll
91 | # need to add a way to distinguish the two.
92 |
93 | INCLUDEPATH += $$PWD/sv-dependency-builds/win64-msvc/include $$PWD/sv-dependency-builds/win64-msvc/include/opus /Libraries/boost_1_71_0 /Libraries/boost_1_69_0 $$PWD/../boost_1_69_0/
94 |
95 | # This seems to be intruding even when we're supposed to be release
96 | # CONFIG(debug) {
97 | # LIBS += -NODEFAULTLIB:MSVCRT -Ldebug \
98 | # -L$$PWD/sv-dependency-builds/win64-msvc/lib/debug \
99 | # -L$$PWD/sv-dependency-builds/win64-msvc/lib
100 | # }
101 | CONFIG(release) {
102 | LIBS += -NODEFAULTLIB:LIBCMT -Lrelease \
103 | -L$$PWD/sv-dependency-builds/win64-msvc/lib
104 | }
105 |
106 | DEFINES += NOMINMAX _USE_MATH_DEFINES CAPNP_LITE HAVE_MEDIAFOUNDATION _HAS_STD_BYTE=0
107 |
108 | QMAKE_CXXFLAGS_RELEASE += -fp:fast
109 |
110 | LIBS -= -lFLAC -lvorbis -lvorbisenc -lvorbisfile
111 |
112 | # These have different names
113 | LIBS -= -lsord-0 -lserd-0
114 | LIBS += -lsord -lserd
115 |
116 | # Don't have liblo
117 | DEFINES -= HAVE_LIBLO
118 | LIBS -= -llo
119 |
120 | LIBS += -lmfplat -lmfreadwrite -lmfuuid -lpropsys -ladvapi32 -lwinmm -lws2_32
121 | }
122 |
123 | macx* {
124 |
125 | # All Mac builds are 64-bit these days.
126 |
127 | INCLUDEPATH += $$PWD/sv-dependency-builds/osx/include $$PWD/sv-dependency-builds/osx/include/opus
128 | LIBS += -L$$PWD/sv-dependency-builds/osx/lib -L$$PWD
129 |
130 | INCLUDEPATH += /usr/local/opt/boost/include $$PWD/../boost_1_74_0
131 |
132 | QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math -flto
133 | QMAKE_LFLAGS_RELEASE += -O3 -flto
134 |
135 | QMAKE_LFLAGS_RELEASE += -isysroot $$QMAKE_MAC_SDK_PATH
136 |
137 | DEFINES += HAVE_COREAUDIO HAVE_VDSP
138 | LIBS += \
139 | -framework CoreAudio \
140 | -framework CoreMidi \
141 | -framework AudioUnit \
142 | -framework AudioToolbox \
143 | -framework CoreFoundation \
144 | -framework CoreServices \
145 | -framework Accelerate
146 | }
147 |
148 | linux* {
149 |
150 | message("Building without ./configure on Linux is unlikely to work")
151 | message("If you really want to try it, remove this from noconfig.pri")
152 | error("Refusing to build without ./configure first")
153 | }
154 |
155 |
--------------------------------------------------------------------------------
/repoint:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Disable shellcheck warnings for useless-use-of-cat. UUOC is good
4 | # practice, not bad: clearer, safer, less error-prone.
5 | # shellcheck disable=SC2002
6 |
7 | sml="$REPOINT_SML"
8 |
9 | set -eu
10 |
11 | # avoid gussying up output
12 | export HGPLAIN=true
13 |
14 | mydir=$(dirname "$0")
15 | program="$mydir/repoint.sml"
16 |
17 | hasher=
18 | local_install=
19 | if [ -w "$mydir" ]; then
20 | if echo | sha256sum >/dev/null 2>&1 ; then
21 | hasher=sha256sum
22 | local_install=true
23 | elif echo | shasum >/dev/null 2>&1 ; then
24 | hasher=shasum
25 | local_install=true
26 | else
27 | echo "WARNING: sha256sum or shasum program not found" 1>&2
28 | fi
29 | fi
30 |
31 | if [ -n "$local_install" ]; then
32 | hash=$(echo "$sml" | cat "$program" - | $hasher | cut -c1-16)
33 | gen_sml=$mydir/.repoint-$hash.sml
34 | gen_out=$mydir/.repoint-$hash.bin
35 | trap 'rm -f $gen_sml' 0
36 | else
37 | gen_sml=$(mktemp /tmp/repoint-XXXXXXXX.sml)
38 | gen_out=$(mktemp /tmp/repoint-XXXXXXXX.bin)
39 | trap 'rm -f $gen_sml $gen_out' 0
40 | fi
41 |
42 | if [ -x "$gen_out" ]; then
43 | exec "$gen_out" "$@"
44 | fi
45 |
46 | # We need one of Poly/ML, SML/NJ, MLton, or MLKit. Since we're running
47 | # a single-file SML program as if it were a script, our order of
48 | # preference is usually based on startup speed. An exception is the
49 | # local_install case, where we retain a persistent binary
50 |
51 | if [ -z "$sml" ]; then
52 | if [ -n "$local_install" ] && mlton 2>&1 | grep -q 'MLton'; then
53 | sml="mlton"
54 | elif sml -h 2>&1 | grep -q 'Standard ML of New Jersey'; then
55 | sml="smlnj"
56 | # We would prefer Poly/ML to SML/NJ, except that Poly v5.7 has a
57 | # nasty bug that occasionally causes it to deadlock on startup.
58 | # That is fixed in v5.7.1, so we could promote it up the order
59 | # again at some point in future
60 | elif echo | poly -v 2>/dev/null | grep -q 'Poly/ML'; then
61 | sml="polyml"
62 | elif mlton 2>&1 | grep -q 'MLton'; then
63 | sml="mlton"
64 | # MLKit is at the bottom because it leaves compiled files around
65 | # in an MLB subdir in the current directory
66 | elif mlkit 2>&1 | grep -q 'MLKit'; then
67 | sml="mlkit"
68 | else cat 1>&2 <&2 </dev/null 2>&1 ; then
114 | if [ ! -x "$gen_out" ]; then
115 | polyc -o "$gen_out" "$program"
116 | fi
117 | "$gen_out" "$@"
118 | else
119 | echo 'use "'"$program"'"; repoint ['"$arglist"'];' |
120 | poly -q --error-exit
121 | fi ;;
122 | mlton)
123 | if [ ! -x "$gen_out" ]; then
124 | echo "[Precompiling Repoint binary...]" 1>&2
125 | echo "val _ = main ()" | cat "$program" - > "$gen_sml"
126 | mlton -output "$gen_out" "$gen_sml"
127 | fi
128 | "$gen_out" "$@" ;;
129 | mlkit)
130 | if [ ! -x "$gen_out" ]; then
131 | echo "[Precompiling Repoint binary...]" 1>&2
132 | echo "val _ = main ()" | cat "$program" - > "$gen_sml"
133 | mlkit -output "$gen_out" "$gen_sml"
134 | fi
135 | "$gen_out" "$@" ;;
136 | smlnj)
137 | cat "$program" | (
138 | cat < (), flush = fn () => () };
142 | x
143 | end;
144 | val smlrun__prev = ref "";
145 | Control.Print.out := {
146 | say = fn s =>
147 | (if String.isSubstring " Error" s
148 | then (Control.Print.out := smlrun__cp;
149 | (#say smlrun__cp) (!smlrun__prev);
150 | (#say smlrun__cp) s)
151 | else (smlrun__prev := s; ())),
152 | flush = fn s => ()
153 | };
154 | EOF
155 | cat -
156 | cat < "$gen_sml"
161 | CM_VERBOSE=false sml "$gen_sml" ;;
162 | *)
163 | echo "ERROR: Unknown SML implementation name: $sml" 1>&2;
164 | exit 2 ;;
165 | esac
166 |
167 |
--------------------------------------------------------------------------------
/main/SmallSession.cpp:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #include "SmallSession.h"
16 |
17 | #include "base/TempWriteFile.h"
18 | #include "base/XmlExportable.h"
19 | #include "base/Exceptions.h"
20 |
21 | #include
22 | #include
23 | #include
24 |
25 | void
26 | SmallSession::save(const SmallSession &session, QString sessionFile)
27 | {
28 | TempWriteFile tempFile(sessionFile);
29 | QString tempFilePath(tempFile.getTemporaryFilename());
30 |
31 | QFile f(tempFilePath);
32 | if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) {
33 | throw std::runtime_error("Failed to open temporary file for writing");
34 | }
35 |
36 | QTextStream out(&f);
37 | out.setCodec(QTextCodec::codecForName("UTF-8"));
38 |
39 | out << "\n"
40 | << "\n"
41 | << "\n";
42 |
43 | out << (QString(" \n")
45 | .arg(XmlExportable::encodeEntities(session.mainFile)));
46 |
47 | for (int i = 0; in_range_for(session.additionalFiles, i); ++i) {
48 |
49 | out << (QString(" \n")
51 | .arg(i + 2)
52 | .arg(XmlExportable::encodeEntities
53 | (session.additionalFiles[i])));
54 | }
55 |
56 | out << "\n";
57 |
58 | f.close();
59 |
60 | try {
61 | tempFile.moveToTarget();
62 | } catch (const FileOperationFailed &f) {
63 | throw std::runtime_error("Failed to move temporary file to save target");
64 | }
65 | }
66 |
67 | class SmallSessionReadHandler : public QXmlDefaultHandler
68 | {
69 | public:
70 | SmallSessionReadHandler() :
71 | m_inVectContext(false) {
72 | }
73 | virtual ~SmallSessionReadHandler() {
74 | }
75 |
76 | bool startElement(const QString & /* namespaceURI */,
77 | const QString & /* localName */,
78 | const QString &qName,
79 | const QXmlAttributes& attributes) override {
80 |
81 | QString name = qName.toLower();
82 |
83 | if (name == "vect") {
84 | if (m_inVectContext) {
85 | m_errorString = "Nested session contexts found";
86 | } else {
87 | m_inVectContext = true;
88 | }
89 | } else if (name == "model") {
90 | if (!m_inVectContext) {
91 | m_errorString = "Model found outside session context";
92 | } else {
93 | readModel(attributes);
94 | }
95 | } else {
96 | SVCERR << "WARNING: SmallSessionReadHandler: Unexpected element \""
97 | << name << "\"" << endl;
98 | }
99 |
100 | return true;
101 | }
102 |
103 | void readModel(const QXmlAttributes &attributes) {
104 |
105 | QString type = attributes.value("type").trimmed();
106 | bool isMainModel = (attributes.value("mainModel").trimmed() == "true");
107 |
108 | if (type == "wavefile") {
109 |
110 | QString file = attributes.value("file");
111 |
112 | if (isMainModel) {
113 | if (m_session.mainFile != "") {
114 | m_errorString = "Duplicate main model found";
115 | } else {
116 | m_session.mainFile = file;
117 | }
118 | } else {
119 | m_session.additionalFiles.push_back(file);
120 | }
121 |
122 | } else {
123 | SVCERR << "WARNING: SmallSessionReadHandler: Unsupported model type \""
124 | << type << "\"" << endl;
125 | }
126 | }
127 |
128 | bool error(const QXmlParseException &exception) override {
129 | m_errorString =
130 | QString("%1 at line %2, column %3")
131 | .arg(exception.message())
132 | .arg(exception.lineNumber())
133 | .arg(exception.columnNumber());
134 | SVCERR << "ERROR: SmallSessionReadHandler: " << m_errorString << endl;
135 | return QXmlDefaultHandler::error(exception);
136 | }
137 |
138 | bool fatalError(const QXmlParseException &exception) override {
139 | m_errorString =
140 | QString("%1 at line %2, column %3")
141 | .arg(exception.message())
142 | .arg(exception.lineNumber())
143 | .arg(exception.columnNumber());
144 | SVCERR << "ERROR: SmallSessionReadHandler: " << m_errorString << endl;
145 | return QXmlDefaultHandler::fatalError(exception);
146 | }
147 |
148 | bool isOK() const { return (m_errorString == ""); }
149 | QString getErrorString() const { return m_errorString; }
150 | SmallSession getSession() const { return m_session; }
151 |
152 | private:
153 | SmallSession m_session;
154 | QString m_errorString;
155 | bool m_inVectContext;
156 | };
157 |
158 | SmallSession
159 | SmallSession::load(QString path)
160 | {
161 | QFile f(path);
162 | if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
163 | throw std::runtime_error("Failed to open file for reading");
164 | }
165 |
166 | SmallSessionReadHandler handler;
167 | QXmlSimpleReader reader;
168 | reader.setContentHandler(&handler);
169 | reader.setErrorHandler(&handler);
170 |
171 | QXmlInputSource source(&f);
172 | bool ok = reader.parse(source);
173 |
174 | if (!handler.isOK()) {
175 | throw std::runtime_error
176 | (("Session XML load failed: " + handler.getErrorString())
177 | .toStdString());
178 | } else if (!ok) {
179 | throw std::runtime_error("Session XML parse failed");
180 | }
181 |
182 | return handler.getSession();
183 | }
184 |
185 |
--------------------------------------------------------------------------------
/vect-mac.qss:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Vect
5 | An experimental audio player for plural recordings of a work
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This file is based on the Thorn theme of the Rosegarden MIDI and
9 | audio sequencer and notation editor. Copyright 2006-2014
10 | D. Michael McIntyre and the Rosegarden team.
11 |
12 | This program is free software; you can redistribute it and/or
13 | modify it under the terms of the GNU General Public License as
14 | published by the Free Software Foundation; either version 2 of the
15 | License, or (at your option) any later version. See the file
16 | COPYING included with this distribution for more information.
17 | */
18 |
19 | QWidget
20 | {
21 | background: #333333;
22 | color: #FAFAFA;
23 | }
24 |
25 | QDialog
26 | {
27 | background-color: #333333;
28 | }
29 |
30 | QFrame#BottomFrame,
31 | QFrame#BottomFrame > QFrame
32 | {
33 | background-color: #333333;
34 | }
35 |
36 | QLabel
37 | {
38 | background: transparent;
39 | color: white;
40 | }
41 |
42 | QMenu
43 | {
44 | background-color: #EEEEEE;
45 | border: 1px solid black;
46 | }
47 |
48 | QMenu::separator
49 | {
50 | height: 2px;
51 | background: #AAAAAA;
52 | margin-left: 10px;
53 | margin-right: 5px;
54 | }
55 |
56 | QMenu::item:enabled
57 | {
58 | background-color: transparent;
59 | color: #000000;
60 | padding: 2px 25px 2px 20px;
61 | border: 1px solid transparent;
62 | min-width: 12em; /* leaves room for space between item and hotkey */
63 | }
64 |
65 | QMenu::item:!enabled
66 | {
67 | color: #AAAAAA;
68 | padding: 2px 25px 2px 20px;
69 | border: 1px solid transparent;
70 | min-width: 12em; /* leaves room for space between item and hotkey */
71 | }
72 |
73 | QMenu::item:selected
74 | {
75 | background-color: #80AFFF;
76 | color: #FFFFFF;
77 | }
78 |
79 | QCheckBox:enabled QLabel,
80 | QCheckBox:enabled
81 | {
82 | color: #FFFFFF
83 | }
84 |
85 | QCheckbox:!enabled QLabel,
86 | QCheckBox:!enabled
87 | {
88 | color: #000000;
89 | }
90 |
91 | QCheckBox::indicator:enabled
92 | {
93 | background: url(:icons/style/checkbox-checked.png);
94 | }
95 |
96 | QCheckBox
97 | {
98 | spacing: 5px;
99 | }
100 |
101 | QCheckBox::indicator
102 | {
103 | width: 13px;
104 | height: 13px;
105 | }
106 |
107 | QCheckBox::indicator:unchecked
108 | {
109 | image: url(:icons/style/checkbox_unchecked.png);
110 | }
111 |
112 | QCheckBox::indicator:!enabled
113 | {
114 | image: url(:icons/style/checkbox_disabled.png);
115 | }
116 |
117 | QCheckBox::indicator:checked:!enabled
118 | {
119 | image: url(:icons/style/checkbox_checked_disabled.png);
120 | }
121 |
122 | QCheckBox::indicator:unchecked:hover
123 | {
124 | image: url(:icons/style/checkbox_unchecked_hover.png);
125 | }
126 |
127 | QCheckBox::indicator:unchecked:pressed
128 | {
129 | image: url(:icons/style/checkbox_unchecked_pressed.png);
130 | }
131 |
132 | QCheckBox::indicator:checked
133 | {
134 | image: url(:icons/style/checkbox_checked.png);
135 | }
136 |
137 | QCheckBox::indicator:checked:hover
138 | {
139 | image: url(:icons/style/checkbox_checked_hover.png);
140 | }
141 |
142 | QCheckBox::indicator:checked:pressed
143 | {
144 | image: url(:icons/style/checkbox_checked_pressed.png);
145 | }
146 |
147 | QCheckBox::indicator:indeterminate
148 | {
149 | image: url(:icons/style/checkbox_indeterminate.png);
150 | }
151 |
152 | QCheckBox::indicator:indeterminate:hover
153 | {
154 | image: url(:icons/style/checkbox_indeterminate_hover.png);
155 | }
156 |
157 | QCheckBox::indicator:indeterminate:pressed
158 | {
159 | image: url(:icons/style/checkbox_indeterminate_pressed.png);
160 | }
161 |
162 | QRadioButton:enabled QLabel,
163 | QRadioButton:enabled
164 | {
165 | color: #FFFFFF;
166 | }
167 |
168 | QRadioButton:!enabled QLabel,
169 | QRadioButton:!enabled
170 | {
171 | color: #000000;
172 | }
173 |
174 | QRadioButton::indicator
175 | {
176 | width: 13px;
177 | height: 13px;
178 | }
179 |
180 | QRadioButton::indicator::unchecked:enabled
181 | {
182 | image: url(:icons/style/radiobutton_unchecked.png);
183 | }
184 |
185 | QRadioButton::indicator::unchecked:!enabled
186 | {
187 | image: url(:icons/style/radiobutton_unchecked_disabled.png);
188 | }
189 |
190 | QRadioButton::indicator:unchecked:hover:enabled
191 | {
192 | image: url(:icons/style/radiobutton_unchecked_hover.png);
193 | }
194 |
195 | QRadioButton::indicator:unchecked:hover:!enabled
196 | {
197 | image: url(:icons/style/radiobutton_unchecked_hover_disabled.png);
198 | }
199 |
200 | QRadioButton::indicator:unchecked:pressed:enabled
201 | {
202 | image: url(:icons/style/radiobutton_unchecked_pressed.png);
203 | }
204 |
205 | QRadioButton::indicator:unchecked:pressed:!enabled
206 | {
207 | image: url(:icons/style/radiobutton_unchecked_pressed_disabled.png);
208 | }
209 |
210 | QRadioButton::indicator::checked:enabled
211 | {
212 | image: url(:icons/style/radiobutton_checked.png);
213 | }
214 |
215 | QRadioButton::indicator::checked:!enabled
216 | {
217 | image: url(:icons/style/radiobutton_checked_disabled.png);
218 | }
219 |
220 | QRadioButton::indicator:checked:hover:enabled
221 | {
222 | image: url(:icons/style/radiobutton_checked_hover.png);
223 | }
224 |
225 | QRadioButton::indicator:checked:hover:!enabled
226 | {
227 | image: url(:icons/style/radiobutton_checked_hover_disabled.png);
228 | }
229 |
230 | QRadioButton::indicator:checked:pressed:enabled
231 | {
232 | image: url(:icons/style/radiobutton_checked_pressed.png);
233 | }
234 |
235 | QRadioButton::indicator:checked:pressed:!enabled
236 | {
237 | image: url(:icons/style/radiobutton_checked_pressed_disabled.png);
238 | }
239 |
240 | QMenuBar
241 | {
242 | background-color: #404040;
243 | }
244 |
245 | QMenuBar::item
246 | {
247 | spacing: 3px; /* spacing between menu bar items */
248 | padding: 1px 4px;
249 | background: transparent;
250 | color: #FFFFFF;
251 | }
252 |
253 | QMenuBar::item:selected
254 | {
255 | background-color: #80AFFF;
256 | color: #FFFFFF;
257 | }
258 |
259 | QMenuBar::item:pressed
260 | {
261 | background-color: #BBCEFF;
262 | }
263 |
264 | QMessageBox
265 | {
266 | background: #000000;
267 | }
268 |
269 | QProgressBar
270 | {
271 | border: 1px solid #AAAAAA;
272 | border-radius: 3px;
273 | text-align: center;
274 | background: #FFFFFF;
275 | }
276 |
277 | QProgressBar::chunk
278 | {
279 | background-color: #89B8E7;
280 | width: 20px;
281 | }
282 |
283 | QToolButton
284 | {
285 | background-color: transparent;
286 | border: 0px;
287 | }
288 |
289 | QPushButton,
290 | QFileDialog QPushButton,
291 | QDialog QPushButton
292 | {
293 | border: 2px solid #AAAAAA;
294 | border-radius: 2px;
295 | padding: 0.18em;
296 | padding-left: 0.5em;
297 | padding-right: 0.5em;
298 | margin-top: 0.1em;
299 | margin-bottom: 0.1em;
300 | margin-left: 0.2em;
301 | margin-right: 0.2em;
302 | }
303 |
304 | QPushButton:disabled,
305 | QFileDialog QPushButton:disabled,
306 | QDialog QPushButton:disabled
307 | {
308 | color: #AAAAAA;
309 | }
310 |
311 | QPushButton:pressed,
312 | QFileDialog QPushButton:pressed,
313 | QDialog QPushButton:pressed,
314 | QFileDialog QPushButton:on,
315 | QDialog QPushButton:on
316 | {
317 | background-color: #BBCEFF;
318 | }
319 |
320 | QPushButton::enabled:hover
321 | {
322 | background-color: #666666;
323 | }
324 |
325 | QPushButton::checked
326 | {
327 | background-color: #666666;
328 | }
329 |
--------------------------------------------------------------------------------
/configure.ac:
--------------------------------------------------------------------------------
1 |
2 | AC_INIT([Sonic Lineup], [], cannam@all-day-breakfast.com)
3 |
4 | AC_CONFIG_SRCDIR(main/main.cpp)
5 |
6 | # Autoconf will set CXXFLAGS; we don't usually want it to, because we
7 | # either define our own flags (at least if GCC is in use) or else use
8 | # the user's preferences. We need to ensure CXXFLAGS is only set if
9 | # the user has expressly set it. So, save the user's (or empty)
10 | # setting now and restore it after Autoconf has done its bit of
11 | # piddling about.
12 | USER_CXXFLAGS="$CXXFLAGS"
13 |
14 | # If the user supplied CFLAGS but not CXXFLAGS, use CFLAGS instead
15 | if test x"$USER_CXXFLAGS" = x; then
16 | if test x"$CFLAGS" != x; then
17 | USER_CXXFLAGS="$CFLAGS"
18 | fi
19 | fi
20 |
21 | AC_LANG_CPLUSPLUS
22 |
23 | AC_PROG_CC
24 | AC_PROG_CXX
25 | AC_PROG_INSTALL
26 | AC_PROG_MKDIR_P
27 |
28 | # We are daringly making use of C++11 now
29 | AX_CXX_COMPILE_STDCXX_11(noext)
30 |
31 | AC_HEADER_STDC
32 |
33 | # These are the flags Autoconf guesses for us; we use them later if
34 | # the user has set none and we are not using GCC (so lack our own
35 | # preferred flags)
36 | AUTOCONF_CXXFLAGS="$CXXFLAGS"
37 |
38 | PKG_PROG_PKG_CONFIG
39 |
40 | SV_CHECK_QT
41 |
42 | SV_DEFINES_DEBUG="-DDEBUG -DBUILD_DEBUG -DWANT_TIMING"
43 | SV_DEFINES_RELEASE="-DNDEBUG -DBUILD_RELEASE -DNO_TIMING -DNO_HIT_COUNTS"
44 |
45 | # Now we have: USER_CXXFLAGS contains any flags the user set
46 | # explicitly; AUTOCONF_CXXFLAGS contains flags that Autoconf thought
47 | # we should use. If we have GCC, we override the latter but then
48 | # allow ourselves to be overridden (later) by the former
49 |
50 | CXXFLAGS_DEBUG="$AUTOCONF_CXXFLAGS"
51 | OPTFLAGS_DEBUG="-O2"
52 | LDFLAGS_DEBUG=""
53 | CXXFLAGS_RELEASE="$AUTOCONF_CXXFLAGS"
54 | OPTFLAGS_RELEASE="-O2"
55 | LDFLAGS_RELEASE=""
56 | CXXSTANDARD=c++14
57 |
58 | if test "x$GCC" = "xyes"; then
59 | CXXFLAGS_ANY="-fpic -Wall -Wextra -Woverloaded-virtual -Wformat-nonliteral -Wformat-security -Winit-self -Wswitch-enum -Wconversion -pipe"
60 | CXXFLAGS_DEBUG="$CXXFLAGS_ANY -g -Werror"
61 | OPTFLAGS_DEBUG="-O2"
62 | CXXFLAGS_RELEASE="$CXXFLAGS_ANY -g0"
63 | OPTFLAGS_RELEASE="-O3 -ffast-math"
64 | LIBS_DEBUG="$LIBS"
65 | AX_CHECK_COMPILE_FLAG(--std=$CXXSTANDARD, [], [AC_MSG_NOTICE([Compiler does not appear to support $CXXSTANDARD, falling back to c++11])
66 | CXXSTANDARD=c++11])
67 | fi
68 |
69 | CXXFLAGS_BUILD="$CXXFLAGS_RELEASE $OPTFLAGS_RELEASE"
70 | LDFLAGS_BUILD="$LDFLAGS_RELEASE $OPTFLAGS_RELEASE"
71 | SV_DEFINES_BUILD="$SV_DEFINES_RELEASE"
72 |
73 | QMAKE_CONFIG="release"
74 |
75 | AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug],[enable debug support [default=no]])],[AC_MSG_NOTICE([enabling debug build])
76 | QMAKE_CONFIG="debug"
77 | CXXFLAGS_BUILD="$CXXFLAGS_DEBUG $OPTFLAGS_DEBUG"
78 | LDFLAGS_BUILD="$LDFLAGS_DEBUG"
79 | SV_DEFINES_BUILD="$SV_DEFINES_DEBUG"
80 | LIBS="$LIBS_DEBUG"])
81 |
82 | if test x"$USER_CXXFLAGS" != x; then
83 | AC_MSG_NOTICE([The CXXFLAGS environment variable is set to "$USER_CXXFLAGS".])
84 | AC_MSG_NOTICE(Overriding default compiler flags with the above user setting.)
85 | CXXFLAGS_BUILD="$USER_CXXFLAGS"
86 | LDFLAGS_BUILD=""
87 | fi
88 |
89 | CXXFLAGS="$CXXFLAGS_BUILD $SV_DEFINES_BUILD"
90 | LDFLAGS="$LDFLAGS_BUILD"
91 |
92 | SV_MODULE_REQUIRED([bz2],[],[bzlib.h],[bz2],[BZ2_bzReadOpen])
93 | SV_MODULE_REQUIRED([fftw3],[fftw3 >= 3.0.0],[fftw3.h],[fftw3],[fftw_execute])
94 | SV_MODULE_REQUIRED([fftw3f],[fftw3f >= 3.0.0],[fftw3.h],[fftw3f],[fftwf_execute])
95 | SV_MODULE_REQUIRED([sndfile],[sndfile >= 1.0.16],[sndfile.h],[sndfile],[sf_open])
96 | SV_MODULE_REQUIRED([samplerate],[samplerate >= 0.1.2],[samplerate.h],[samplerate],[src_new])
97 | SV_MODULE_REQUIRED([rubberband],[rubberband],[rubberband/RubberBandStretcher.h],[rubberband],[rubberband_new])
98 | SV_MODULE_REQUIRED([sord],[sord-0 >= 0.5],[sord/sord.h],[sord-0],[sord_world_new])
99 | SV_MODULE_REQUIRED([serd],[serd-0 >= 0.5],[serd/serd.h],[serd-0],[serd_reader_read_file])
100 |
101 | # We need a Cap'n Proto version with the expectedSizeInWordsFromPrefix
102 | # function, which appeared in v0.6. If we can't find at least that
103 | # version with pkg-config, we check for the symbol with the compiler.
104 | PKG_CHECK_MODULES([capnp],[capnp >= 0.6],[HAVES="$HAVES HAVE_CAPNP";CXXFLAGS="$CXXFLAGS $capnp_CFLAGS";LIBS="$LIBS $capnp_LIBS"],[AC_MSG_NOTICE([Failed to find required module capnp using pkg-config, trying again by old-fashioned means])])
105 | if test -z "$capnp_LIBS" ; then
106 | AC_COMPILE_IFELSE([
107 | AC_LANG_SOURCE([[
108 | #include
109 | int main() {
110 | kj::Array prefix;
111 | return capnp::expectedSizeInWordsFromPrefix(prefix.asPtr());
112 | }]])],
113 | [HAVES="$HAVES HAVE_CAPNP";LIBS="$LIBS -lcapnp -lkj"],
114 | [AC_MSG_ERROR([Failed to find appropriate capnp library])]
115 | )
116 | fi
117 |
118 | SV_MODULE_OPTIONAL([liblo],[],[lo/lo.h],[lo],[lo_address_new])
119 | SV_MODULE_OPTIONAL([portaudio_2_0],[portaudio-2.0 >= 19],[portaudio.h],[portaudio],[Pa_IsFormatSupported])
120 | SV_MODULE_OPTIONAL([JACK],[jack >= 0.100],[jack/jack.h],[jack],[jack_client_open])
121 | SV_MODULE_OPTIONAL([libpulse],[libpulse >= 0.9],[pulse/pulseaudio.h],[pulse],[pa_stream_new])
122 |
123 | SV_MODULE_REQUIRED([lrdf],[lrdf >= 0.2],[lrdf.h],[lrdf],[lrdf_init])
124 | SV_MODULE_REQUIRED([oggz],[oggz >= 1.0.0],[oggz/oggz.h],[oggz],[oggz_run])
125 | SV_MODULE_REQUIRED([fishsound],[fishsound >= 1.0.0],[fishsound/fishsound.h],[fishsound],[fish_sound_new])
126 | SV_MODULE_REQUIRED([mad],[mad >= 0.15.0],[mad.h],[mad],[mad_decoder_init])
127 | SV_MODULE_REQUIRED([id3tag],[id3tag >= 0.15.0],[id3tag.h],[id3tag],[id3_tag_new])
128 | SV_MODULE_REQUIRED([opus],[opusfile],[opus/opusfile.h],[opusfile],[op_read_float])
129 |
130 | # Link in -lX11 if it exists -- this is for the X error handler
131 | SV_MODULE_OPTIONAL([X11],[x11 >= 1.0.0],[X11/X.h],[x11],[XGetErrorText])
132 |
133 | AC_SUBST(PERL)
134 | AC_SUBST(XARGS)
135 | AC_SUBST(MAKEDEPEND)
136 | AC_SUBST(SHA1SUM)
137 | AC_SUBST(CUT)
138 |
139 | AC_SUBST(CFLAGS)
140 | AC_SUBST(CXXFLAGS)
141 | AC_SUBST(CXXSTANDARD)
142 | AC_SUBST(LDFLAGS)
143 | AC_SUBST(HAVES)
144 | AC_SUBST(LIBS)
145 |
146 | AC_SUBST(CC)
147 | AC_SUBST(CXX)
148 |
149 | AC_SUBST(QMAKE_CONFIG)
150 |
151 | AC_CONFIG_FILES([config.pri])
152 |
153 | AC_OUTPUT
154 |
155 | if test -x repoint ; then
156 | if test -d .hg -o -d .git ; then
157 | if ! ./repoint install; then
158 | AC_MSG_ERROR([Repoint failed; please fix any reported errors and try again])
159 | fi
160 | else
161 | AC_MSG_NOTICE([Repoint executable found but not in an Hg or Git working-copy: not running it])
162 | if ! test -d vamp-plugin-sdk ; then
163 | AC_MSG_WARN([No vamp-plugin-sdk directory present, so external libraries might not have been updated])
164 | fi
165 | fi
166 | else
167 | AC_MSG_NOTICE([No Repoint executable found: assuming external components are already here])
168 | if ! test -d vamp-plugin-sdk ; then
169 | AC_MSG_WARN([No vamp-plugin-sdk directory present, so external components might not have been updated])
170 | fi
171 | fi
172 |
173 | if ! $QMAKE -r sonic-lineup.pro; then
174 | AC_MSG_ERROR([qmake failed: Command was "$QMAKE -r"])
175 | fi
176 |
177 | AC_MSG_NOTICE([
178 |
179 | Configuration complete.
180 | Please check the above messages for any warnings that you
181 | might care about, and then run "make".
182 |
183 | The file config.pri contains the configuration settings for
184 | qmake. If you want to adjust these by hand, edit config.pri
185 | and run "$QMAKE -r" again to regenerate the Makefile.
186 | ])
187 |
--------------------------------------------------------------------------------
/main/IntroDialog.cpp:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #include "IntroDialog.h"
16 |
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 |
29 | #include "widgets/IconLoader.h"
30 |
31 | #include
32 | #include
33 |
34 | using namespace std;
35 |
36 | void
37 | IntroDialog::show(QWidget *parent)
38 | {
39 | QSettings settings;
40 | settings.beginGroup("IntroDialog");
41 | if (settings.value("shown", false).toBool()) {
42 | return;
43 | }
44 |
45 | QDialog d(parent, Qt::SplashScreen);
46 | d.setWindowTitle(d.tr("Welcome!"));
47 |
48 | vector> texts {
49 | { d.tr("Welcome!"),
50 | d.tr("The first thing is to open some audio files. The Open button
"
51 | "is on the toolbar up here.
"
52 | "(But please read these introductory notes first!)
"
53 | "If you have more than one recording of the same thing,
"
54 | "such as multiple performances, takes, or even cover versions,"
55 | "
try opening them all in one go.
"
56 | "Comparative visualisation is what this app is designed for.
"
57 | "You can also record a new track directly from the "
58 | "microphone.
")
59 | },
60 | { d.tr("Scroll, zoom, and play"),
61 | d.tr("Your audio files will all appear in this main pane.
"
62 | "Drag left and right to move through time, and use
"
63 | "two-finger scroll-drag, or a scroll wheel, to zoom.
"
64 | "You can also move using the left and right cursor keys,
"
65 | "and zoom using the up and down keys.
"
66 | "%1 will try to align the audio files, so as to
"
67 | "ensure they scroll together in terms of musical material.
"
68 | "You can toggle or control alignment in the Playback menu.
"
69 | ).arg(QApplication::applicationName())
70 | },
71 | { d.tr("Change your view"),
72 | d.tr("Use the buttons along the bottom to change the current view.
"
73 | "There are two waveform views: \"Outline\" for a simplified
"
74 | "overview, or a more typical waveform for detail. And two
"
75 | "spectrograms with different frequency and colour profiles.
"
76 | "The \"Sung pitch\" view shows pitch profiles, in the case of
"
77 | "solo singing or similar music; \"Key\" is a key-likelihood plot;
"
78 | "and \"Stereo azimuth\" gives a stereo-plan decomposition.
"
79 | "See the documentation in the Help menu for more details.
"
80 | ""
81 | )
82 | }
83 | };
84 |
85 | QGridLayout *outerLayout = new QGridLayout;
86 | d.setLayout(outerLayout);
87 | QFrame *outerFrame = new QFrame;
88 | #ifdef Q_OS_WIN32
89 | outerFrame->setFrameStyle(QFrame::Panel | QFrame::Raised);
90 | #endif
91 | outerLayout->addWidget(outerFrame, 0, 0);
92 |
93 | QGridLayout *layout = new QGridLayout;
94 | outerFrame->setLayout(layout);
95 | layout->setRowStretch(0, 10);
96 | layout->setRowStretch(1, 20);
97 | layout->setRowStretch(2, 10);
98 | layout->setRowStretch(3, 0);
99 | layout->setColumnStretch(0, 0);
100 | layout->setColumnStretch(1, 0);
101 | layout->setColumnStretch(2, 20);
102 |
103 | int page = 1;
104 |
105 | vector arrowFiles {
106 | ":icons/scalable/arrow-above-white.svg",
107 | ":icons/scalable/arrow-left-white.svg",
108 | ":icons/scalable/arrow-below-white.svg"
109 | };
110 |
111 | int dpratio = d.devicePixelRatio();
112 | int sz = dpratio * int(round(parent->height() * 0.1));
113 |
114 | vector arrowPixmaps {
115 | QPixmap(sz, sz),
116 | QPixmap(sz, (sz * 6) / 10),
117 | QPixmap(sz, sz)
118 | };
119 |
120 | for (int i = 0; i < int(arrowFiles.size()); ++i) {
121 | arrowPixmaps[i].fill(Qt::transparent);
122 | QPainter painter(&arrowPixmaps[i]);
123 | QSvgRenderer renderer(arrowFiles[i]);
124 | renderer.render(&painter);
125 | arrowPixmaps[i].setDevicePixelRatio(dpratio);
126 | }
127 |
128 | vector arrowLabels;
129 |
130 | for (auto p: arrowPixmaps) {
131 | QLabel *arrowLabel = new QLabel;
132 | arrowLabel->setPixmap(p);
133 | arrowLabel->setVisible(arrowLabels.empty());
134 | arrowLabels.push_back(arrowLabel);
135 | }
136 |
137 | layout->addWidget(arrowLabels[0], 0, 0);
138 | layout->addWidget(arrowLabels[1], 1, 0, 1, 1, Qt::AlignTop);
139 | layout->addWidget(arrowLabels[2], 1, 0, 1, 1, Qt::AlignBottom);
140 |
141 | QFont smallerFont(d.font());
142 | #ifdef Q_OS_WIN32
143 | if (smallerFont.pixelSize() > 0) {
144 | smallerFont.setPixelSize(int(ceil(smallerFont.pixelSize() * 1.1)));
145 | } else {
146 | smallerFont.setPointSize(int(ceil(smallerFont.pointSize() * 1.1)));
147 | }
148 | #endif
149 |
150 | QFont biggerFont(d.font());
151 | if (biggerFont.pixelSize() > 0) {
152 | biggerFont.setPixelSize(int(ceil(biggerFont.pixelSize() * 1.4)));
153 | } else {
154 | biggerFont.setPointSize(int(ceil(biggerFont.pointSize() * 1.4)));
155 | }
156 |
157 | QLabel *numberLabel = new QLabel;
158 | numberLabel->setText(d.tr("%1.").arg(page));
159 | layout->addWidget(numberLabel, 0, 1, 1, 1,
160 | Qt::AlignRight | Qt::AlignBottom);
161 | numberLabel->setFont(biggerFont);
162 |
163 | QLabel *titleLabel = new QLabel;
164 | titleLabel->setText(texts[page-1].first);
165 | titleLabel->setFont(biggerFont);
166 | layout->addWidget(titleLabel, 0, 2, 1, 1,
167 | Qt::AlignLeft | Qt::AlignBottom);
168 |
169 | QLabel *bodyLabel = new QLabel;
170 | bodyLabel->setWordWrap(false);
171 | bodyLabel->setText(texts[page-1].second);
172 | bodyLabel->setFont(smallerFont);
173 | layout->addWidget(bodyLabel, 1, 2);
174 |
175 | QDialogButtonBox *bb = new QDialogButtonBox;
176 |
177 | QPushButton *prev = bb->addButton
178 | (d.tr("&Prev"), QDialogButtonBox::ActionRole);
179 | prev->setIcon(IconLoader().load("rewind"));
180 | prev->setEnabled(false);
181 |
182 | QPushButton *next = bb->addButton
183 | (d.tr("&Next"), QDialogButtonBox::ActionRole);
184 | next->setIcon(IconLoader().load("ffwd"));
185 |
186 | QPushButton *close = bb->addButton(QDialogButtonBox::Close);
187 | QObject::connect(close, SIGNAL(clicked()), &d, SLOT(accept()));
188 | close->setIcon(IconLoader().load("cross"));
189 | close->setEnabled(false);
190 | layout->addWidget(bb, 3, 0, 1, 3);
191 |
192 | auto repage =
193 | [&](int step)
194 | {
195 | arrowLabels[page-1]->hide();
196 |
197 | int npages = int(texts.size());
198 | page += step;
199 |
200 | prev->setEnabled(page > 1);
201 |
202 | next->setEnabled(page < npages);
203 | next->setDefault(page < npages);
204 |
205 | close->setEnabled(page == npages);
206 | close->setDefault(page == npages);
207 |
208 | numberLabel->setText(d.tr("%1.").arg(page));
209 | titleLabel->setText(texts[page-1].first);
210 | bodyLabel->setText(texts[page-1].second);
211 |
212 | arrowLabels[page-1]->show();
213 | };
214 |
215 | QObject::connect(next, &QPushButton::clicked, [&]() { repage(1); });
216 | QObject::connect(prev, &QPushButton::clicked, [&]() { repage(-1); });
217 |
218 | d.setMinimumSize(QSize(int(ceil(parent->width() * 0.4)),
219 | int(ceil(parent->height() * 0.6))));
220 | d.setModal(false);
221 | d.exec();
222 |
223 | settings.setValue("shown", true);
224 | }
225 |
226 |
--------------------------------------------------------------------------------
/main/PreferencesDialog.cpp:
--------------------------------------------------------------------------------
1 | /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 |
3 | /*
4 | Sonic Lineup
5 | Comparative visualisation and alignment of related audio recordings
6 | Centre for Digital Music, Queen Mary, University of London.
7 |
8 | This program is free software; you can redistribute it and/or
9 | modify it under the terms of the GNU General Public License as
10 | published by the Free Software Foundation; either version 2 of the
11 | License, or (at your option) any later version. See the file
12 | COPYING included with this distribution for more information.
13 | */
14 |
15 | #include "PreferencesDialog.h"
16 |
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 | #include
33 |
34 | #include "widgets/WindowTypeSelector.h"
35 | #include "widgets/IconLoader.h"
36 | #include "base/Preferences.h"
37 |
38 | PreferencesDialog::PreferencesDialog(QWidget *parent) :
39 | QDialog(parent),
40 | m_changesOnRestart(false)
41 | {
42 | setWindowTitle(tr("Sonic Lineup: Application Preferences"));
43 |
44 | Preferences *prefs = Preferences::getInstance();
45 |
46 | QGridLayout *grid = new QGridLayout;
47 | setLayout(grid);
48 |
49 | QTabWidget *tab = new QTabWidget;
50 | grid->addWidget(tab, 0, 0);
51 |
52 | tab->setTabPosition(QTabWidget::North);
53 |
54 | // Create this first, as slots that get called from the ctor will
55 | // refer to it
56 | m_applyButton = new QPushButton(tr("Apply"));
57 |
58 | // Create all the preference widgets first, then create the
59 | // individual tab widgets and place the preferences in their
60 | // appropriate places in one go afterwards
61 |
62 | m_tuningFrequency = prefs->getTuningFrequency();
63 |
64 | QDoubleSpinBox *frequency = new QDoubleSpinBox;
65 | frequency->setMinimum(100.0);
66 | frequency->setMaximum(5000.0);
67 | frequency->setSuffix(" Hz");
68 | frequency->setSingleStep(1);
69 | frequency->setValue(m_tuningFrequency);
70 | frequency->setDecimals(2);
71 |
72 | connect(frequency, SIGNAL(valueChanged(double)),
73 | this, SLOT(tuningFrequencyChanged(double)));
74 |
75 | QSettings settings;
76 | settings.beginGroup("Preferences");
77 | m_useAlignmentProgram = settings.value("use-external-alignment", false).toBool();
78 | QString program = settings.value("external-alignment-program", "").toString();
79 | m_alignmentProgram = program;
80 | program.replace("$HOME", tr(""));
81 | settings.endGroup();
82 |
83 | m_alignmentProgramToggle = new QCheckBox();
84 | connect(m_alignmentProgramToggle, SIGNAL(clicked()),
85 | this, SLOT(alignmentProgramToggleClicked()));
86 | m_alignmentProgramToggle->setChecked(m_useAlignmentProgram);
87 | m_alignmentProgramEdit = new QLineEdit;
88 | m_alignmentProgramEdit->setText(program);
89 | m_alignmentProgramEdit->setReadOnly(true);
90 | m_alignmentProgramEdit->setEnabled(m_useAlignmentProgram);
91 | m_alignmentProgramButton = new QPushButton();
92 | m_alignmentProgramButton->setIcon(IconLoader().load("fileopen"));
93 | connect(m_alignmentProgramButton, SIGNAL(clicked()),
94 | this, SLOT(alignmentProgramButtonClicked()));
95 | m_alignmentProgramButton->setFixedSize(QSize(24, 24));
96 | m_alignmentProgramButton->setEnabled(m_useAlignmentProgram);
97 |
98 | m_normaliseAudio = prefs->getNormaliseAudio();
99 | m_normaliseAudioToggle = new QCheckBox();
100 | m_normaliseAudioToggle->setChecked(m_normaliseAudio);
101 | connect(m_normaliseAudioToggle, SIGNAL(clicked()),
102 | this, SLOT(normaliseAudioToggleClicked()));
103 |
104 | QFrame *frame = new QFrame;
105 |
106 | QGridLayout *subgrid = new QGridLayout;
107 | frame->setLayout(subgrid);
108 |
109 | int row = 0;
110 |
111 | subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel
112 | ("Tuning Frequency"))),
113 | row, 0);
114 | subgrid->addWidget(frequency, row++, 2, 1, 1);
115 |
116 | subgrid->addWidget(new QLabel(tr("%1:").arg(tr("Use external alignment program"))),
117 | row, 0);
118 | subgrid->addWidget(m_alignmentProgramToggle, row, 1, 1, 1);
119 | subgrid->addWidget(m_alignmentProgramEdit, row, 2, 1, 1);
120 | subgrid->addWidget(m_alignmentProgramButton, row, 3, 1, 1);
121 | row++;
122 |
123 | subgrid->addWidget(new QLabel(tr("%1:").arg(tr("Normalise audio"))), row, 0);
124 | subgrid->addWidget(m_normaliseAudioToggle, row, 1, 1, 1);
125 | row++;
126 |
127 | subgrid->setColumnStretch(2, 10);
128 | subgrid->setRowStretch(row, 10);
129 |
130 | tab->addTab(frame, tr("&General"));
131 |
132 | QDialogButtonBox *bb = new QDialogButtonBox(Qt::Horizontal);
133 | grid->addWidget(bb, 1, 0);
134 |
135 | QPushButton *ok = new QPushButton(tr("OK"));
136 | QPushButton *cancel = new QPushButton(tr("Cancel"));
137 | bb->addButton(ok, QDialogButtonBox::AcceptRole);
138 | bb->addButton(m_applyButton, QDialogButtonBox::ApplyRole);
139 | bb->addButton(cancel, QDialogButtonBox::RejectRole);
140 | connect(ok, SIGNAL(clicked()), this, SLOT(okClicked()));
141 | connect(m_applyButton, SIGNAL(clicked()), this, SLOT(applyClicked()));
142 | connect(cancel, SIGNAL(clicked()), this, SLOT(cancelClicked()));
143 |
144 | m_applyButton->setEnabled(false);
145 | }
146 |
147 | PreferencesDialog::~PreferencesDialog()
148 | {
149 | std::cerr << "PreferencesDialog::~PreferencesDialog()" << std::endl;
150 | }
151 |
152 | void
153 | PreferencesDialog::tuningFrequencyChanged(double freq)
154 | {
155 | m_tuningFrequency = freq;
156 | m_applyButton->setEnabled(true);
157 | }
158 |
159 | void
160 | PreferencesDialog::alignmentProgramToggleClicked()
161 | {
162 | m_useAlignmentProgram = m_alignmentProgramToggle->isChecked();
163 | m_alignmentProgramEdit->setEnabled(m_useAlignmentProgram);
164 | m_alignmentProgramButton->setEnabled(m_useAlignmentProgram);
165 | m_applyButton->setEnabled(true);
166 | m_changesOnRestart = true;
167 | }
168 |
169 | void
170 | PreferencesDialog::alignmentProgramButtonClicked()
171 | {
172 | QString file = QFileDialog::getOpenFileName
173 | (this, tr("Select an external alignment program to run"),
174 | m_alignmentProgram);
175 | if (file == "") return;
176 | m_alignmentProgram = file;
177 | file.replace("$HOME", tr(""));
178 | m_alignmentProgramEdit->setText(file);
179 | m_applyButton->setEnabled(true);
180 | m_changesOnRestart = true;
181 | }
182 |
183 | void
184 | PreferencesDialog::normaliseAudioToggleClicked()
185 | {
186 | m_normaliseAudio = m_normaliseAudioToggle->isChecked();
187 | m_applyButton->setEnabled(true);
188 | m_changesOnRestart = true;
189 | }
190 |
191 | void
192 | PreferencesDialog::okClicked()
193 | {
194 | applyClicked();
195 | accept();
196 | }
197 |
198 | void
199 | PreferencesDialog::applyClicked()
200 | {
201 | Preferences *prefs = Preferences::getInstance();
202 | prefs->setTuningFrequency(m_tuningFrequency);
203 | prefs->setNormaliseAudio(m_normaliseAudio);
204 |
205 | QSettings settings;
206 | settings.beginGroup("Preferences");
207 | settings.setValue("use-external-alignment", m_useAlignmentProgram);
208 | settings.setValue("external-alignment-program", m_alignmentProgram);
209 | settings.endGroup();
210 |
211 | m_applyButton->setEnabled(false);
212 |
213 | if (m_changesOnRestart) {
214 | QMessageBox::information(this, tr("Preferences"),
215 | tr("One or more of the application preferences you have changed may not take full effect until Sonic Lineup is restarted.\nPlease exit and restart the application now if you want these changes to take effect immediately."));
216 | m_changesOnRestart = false;
217 | }
218 | }
219 |
220 | void
221 | PreferencesDialog::cancelClicked()
222 | {
223 | reject();
224 | }
225 |
226 | void
227 | PreferencesDialog::applicationClosing(bool quickly)
228 | {
229 | if (quickly) {
230 | reject();
231 | return;
232 | }
233 |
234 | if (m_applyButton->isEnabled()) {
235 | int rv = QMessageBox::warning
236 | (this, tr("Preferences Changed"),
237 | tr("Some preferences have been changed but not applied.\n"
238 | "Apply them before closing?"),
239 | QMessageBox::Apply | QMessageBox::Discard,
240 | QMessageBox::Discard);
241 | if (rv == QMessageBox::Apply) {
242 | applyClicked();
243 | accept();
244 | } else {
245 | reject();
246 | }
247 | } else {
248 | accept();
249 | }
250 | }
251 |
252 |
--------------------------------------------------------------------------------