gnu: Add sooperlooper.
* gnu/packages/patches/sooperlooper-build-with-wx-30.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/music.scm (sooperlooper): New variable.
This commit is contained in:
parent
c58d1b5f55
commit
5beecc320e
@ -1005,6 +1005,7 @@ dist_patch_DATA = \
|
||||
%D%/packages/patches/slim-reset.patch \
|
||||
%D%/packages/patches/slim-login.patch \
|
||||
%D%/packages/patches/slurm-configure-remove-nonfree-contribs.patch \
|
||||
%D%/packages/patches/sooperlooper-build-with-wx-30.patch \
|
||||
%D%/packages/patches/spice-CVE-2016-9577.patch \
|
||||
%D%/packages/patches/spice-CVE-2016-9578-1.patch \
|
||||
%D%/packages/patches/spice-CVE-2016-9578-2.patch \
|
||||
|
@ -2345,6 +2345,78 @@ part. The player is based on a highly modified version of the ModPlug engine,
|
||||
with a number of bugfixes and changes to improve IT playback.")
|
||||
(license license:gpl2+)))
|
||||
|
||||
(define-public sooperlooper
|
||||
(package
|
||||
(name "sooperlooper")
|
||||
(version "1.7.3")
|
||||
(source (origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "http://essej.net/sooperlooper/sooperlooper-"
|
||||
version ".tar.gz"))
|
||||
(sha256
|
||||
(base32
|
||||
"0n2gdxw1fx8nxxnpzf4sj0kp6k6zi1yq59cbz6qqzcnsnpnvszbs"))
|
||||
(patches (search-patches "sooperlooper-build-with-wx-30.patch"))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:make-flags (list "CXXFLAGS=-std=gnu++11")
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'add-sigc++-includes
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let ((sig (assoc-ref inputs "libsigc++"))
|
||||
(xml (assoc-ref inputs "libxml2"))
|
||||
(cwd (getcwd)))
|
||||
(setenv "CPATH"
|
||||
(string-append sig "/include/sigc++-2.0:"
|
||||
sig "/lib/sigc++-2.0/include:"
|
||||
xml "/include/libxml2/:"
|
||||
cwd "/libs/pbd:"
|
||||
cwd "/libs/midi++")))
|
||||
(substitute* '("src/control_osc.hpp"
|
||||
"src/gui/app_frame.hpp"
|
||||
"src/gui/config_panel.hpp"
|
||||
"src/gui/keys_panel.hpp"
|
||||
"src/gui/latency_panel.hpp"
|
||||
"src/gui/main_panel.hpp"
|
||||
"src/gui/midi_bind_panel.hpp"
|
||||
"src/gui/prefs_dialog.hpp")
|
||||
(("sigc\\+\\+/object.h")
|
||||
"sigc++/sigc++.h"))
|
||||
(substitute* '("src/engine.cpp"
|
||||
"src/gui/latency_panel.cpp"
|
||||
"src/gui/looper_panel.cpp"
|
||||
"src/gui/main_panel.cpp")
|
||||
(("(\\(| )bind " _ pre)
|
||||
(string-append pre "sigc::bind ")))
|
||||
#t))
|
||||
(add-after 'unpack 'fix-xpm-warnings
|
||||
(lambda _
|
||||
(substitute* (find-files "." "\\.xpm$")
|
||||
(("static char") "static const char"))
|
||||
#t)))))
|
||||
(inputs
|
||||
`(("jack" ,jack-1)
|
||||
("alsa-lib" ,alsa-lib)
|
||||
("wxwidgets" ,wxwidgets-gtk2)
|
||||
("libsndfile" ,libsndfile)
|
||||
("libsamplerate" ,libsamplerate)
|
||||
("liblo" ,liblo)
|
||||
("rubberband" ,rubberband)
|
||||
("libxml2" ,libxml2)
|
||||
("libsigc++" ,libsigc++)
|
||||
("ncurses" ,ncurses)))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,pkg-config)))
|
||||
(home-page "http://essej.net/sooperlooper/")
|
||||
(synopsis "Live looping sampler")
|
||||
(description
|
||||
"SooperLooper is a live looping sampler capable of immediate loop
|
||||
recording, overdubbing, multiplying, reversing and more. It allows for
|
||||
multiple simultaneous multi-channel loops limited only by your computer's
|
||||
available memory.")
|
||||
(license license:gpl2+)))
|
||||
|
||||
(define-public moc
|
||||
(package
|
||||
(name "moc")
|
||||
|
179
gnu/packages/patches/sooperlooper-build-with-wx-30.patch
Normal file
179
gnu/packages/patches/sooperlooper-build-with-wx-30.patch
Normal file
@ -0,0 +1,179 @@
|
||||
Downloaded from https://anonscm.debian.org/cgit/pkg-multimedia/sooperlooper.git/plain/debian/patches/04-build_with_wx_30.patch -O gnu/packages/patches/sooperlooper-build-with-wx-30.patch
|
||||
|
||||
Author: Jaromír Mikeš <mira.mikes@seznam.cz>, Olly Betts <olly@survex.com>
|
||||
Description: build against wx 3.0.
|
||||
Forwarded: yes
|
||||
|
||||
Index: sooperlooper/src/gui/main_panel.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/main_panel.cpp
|
||||
+++ sooperlooper/src/gui/main_panel.cpp
|
||||
@@ -448,7 +448,7 @@ MainPanel::init_loopers (int count)
|
||||
while (count < (int)_looper_panels.size()) {
|
||||
looperpan = _looper_panels.back();
|
||||
_looper_panels.pop_back();
|
||||
- _main_sizer->Remove(looperpan);
|
||||
+ _main_sizer->Detach(looperpan);
|
||||
looperpan->Destroy();
|
||||
}
|
||||
}
|
||||
@@ -1277,7 +1277,7 @@ void MainPanel::misc_action (bool releas
|
||||
}
|
||||
|
||||
|
||||
- wxString filename = do_file_selector (wxT("Choose file to save loop"), wxT("wav"), wxT("WAVE files (*.wav)|*.wav;*.WAV;*.Wav"), wxSAVE|wxCHANGE_DIR|wxOVERWRITE_PROMPT);
|
||||
+ wxString filename = do_file_selector (wxT("Choose file to save loop"), wxT("wav"), wxT("WAVE files (*.wav)|*.wav;*.WAV;*.Wav"), wxFD_SAVE|wxFD_CHANGE_DIR|wxFD_OVERWRITE_PROMPT);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
@@ -1296,7 +1296,7 @@ void MainPanel::misc_action (bool releas
|
||||
index = 0;
|
||||
}
|
||||
|
||||
- wxString filename = do_file_selector (wxT("Choose file to open"), wxT(""), wxT("*.slsess"), wxOPEN|wxCHANGE_DIR);
|
||||
+ wxString filename = do_file_selector (wxT("Choose file to open"), wxT(""), wxT("*.slsess"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
@@ -1408,7 +1408,7 @@ void MainPanel::set_curr_loop (int index
|
||||
|
||||
void MainPanel::do_load_session ()
|
||||
{
|
||||
- wxString filename = do_file_selector (wxT("Choose session to load"), wxT("*.slsess"), wxT("*.slsess"), wxOPEN|wxCHANGE_DIR);
|
||||
+ wxString filename = do_file_selector (wxT("Choose session to load"), wxT("*.slsess"), wxT("*.slsess"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
@@ -1419,7 +1419,7 @@ void MainPanel::do_load_session ()
|
||||
|
||||
void MainPanel::do_save_session (bool write_audio)
|
||||
{
|
||||
- wxString filename = do_file_selector (wxT("Choose file to save session"), wxT("slsess"), wxT("*.slsess"), wxSAVE|wxCHANGE_DIR|wxOVERWRITE_PROMPT);
|
||||
+ wxString filename = do_file_selector (wxT("Choose file to save session"), wxT("slsess"), wxT("*.slsess"), wxFD_SAVE|wxFD_CHANGE_DIR|wxFD_OVERWRITE_PROMPT);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
Index: sooperlooper/src/gui/pix_button.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/pix_button.cpp
|
||||
+++ sooperlooper/src/gui/pix_button.cpp
|
||||
@@ -250,7 +250,7 @@ PixButton::OnMouseEvents (wxMouseEvent &
|
||||
pt.x += bounds.x;
|
||||
pt.y += bounds.y;
|
||||
|
||||
- if (bounds.Inside(pt)) {
|
||||
+ if (bounds.Contains(pt)) {
|
||||
clicked (get_mouse_button(ev)); // emit
|
||||
|
||||
if (ev.MiddleUp() && ev.ControlDown()) {
|
||||
Index: sooperlooper/src/gui/looper_panel.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/looper_panel.cpp
|
||||
+++ sooperlooper/src/gui/looper_panel.cpp
|
||||
@@ -1428,7 +1428,7 @@ LooperPanel::clicked_events (int button,
|
||||
if (cmd == wxT("save"))
|
||||
{
|
||||
wxString filename = _mainpanel->do_file_selector (wxT("Choose file to save loop"),
|
||||
- wxT("wav"), wxT("WAVE files (*.wav)|*.wav;*.WAV;*.Wav"), wxSAVE|wxCHANGE_DIR|wxOVERWRITE_PROMPT);
|
||||
+ wxT("wav"), wxT("WAVE files (*.wav)|*.wav;*.WAV;*.Wav"), wxFD_SAVE|wxFD_CHANGE_DIR|wxFD_OVERWRITE_PROMPT);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
@@ -1442,7 +1442,7 @@ LooperPanel::clicked_events (int button,
|
||||
}
|
||||
else if (cmd == wxT("load"))
|
||||
{
|
||||
- wxString filename = _mainpanel->do_file_selector(wxT("Choose file to open"), wxT(""), wxT("Audio files (*.wav,*.aif)|*.wav;*.WAV;*.Wav;*.aif;*.aiff;*.AIF;*.AIFF|All files (*.*)|*.*"), wxOPEN|wxCHANGE_DIR);
|
||||
+ wxString filename = _mainpanel->do_file_selector(wxT("Choose file to open"), wxT(""), wxT("Audio files (*.wav,*.aif)|*.wav;*.WAV;*.Wav;*.aif;*.aiff;*.AIF;*.AIFF|All files (*.*)|*.*"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
Index: sooperlooper/src/gui/keyboard_target.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/keyboard_target.cpp
|
||||
+++ sooperlooper/src/gui/keyboard_target.cpp
|
||||
@@ -553,10 +553,10 @@ KeyboardTarget::keycode_from_name (const
|
||||
keycode = WXK_RETURN;
|
||||
}
|
||||
else if ( keyname == wxT("PGUP") ) {
|
||||
- keycode = WXK_PRIOR;
|
||||
+ keycode = WXK_PAGEUP;
|
||||
}
|
||||
else if ( keyname == wxT("PGDN") ) {
|
||||
- keycode = WXK_NEXT;
|
||||
+ keycode = WXK_PAGEDOWN;
|
||||
}
|
||||
else if ( keyname == wxT("LEFT") ) {
|
||||
keycode = WXK_LEFT;
|
||||
@@ -630,10 +630,10 @@ wxString KeyboardTarget::name_from_keyco
|
||||
case WXK_RETURN:
|
||||
text += wxT("return");
|
||||
break;
|
||||
- case WXK_PRIOR:
|
||||
+ case WXK_PAGEUP:
|
||||
text += wxT("pageup");
|
||||
break;
|
||||
- case WXK_NEXT:
|
||||
+ case WXK_PAGEDOWN:
|
||||
text += wxT("pagedown");
|
||||
break;
|
||||
case WXK_LEFT:
|
||||
Index: sooperlooper/src/gui/check_box.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/check_box.cpp
|
||||
+++ sooperlooper/src/gui/check_box.cpp
|
||||
@@ -237,7 +237,7 @@ CheckBox::OnMouseEvents (wxMouseEvent &e
|
||||
}
|
||||
else if (ev.LeftUp())
|
||||
{
|
||||
- if (bounds.Inside(ev.GetPosition())) {
|
||||
+ if (bounds.Contains(ev.GetPosition())) {
|
||||
// toggle value
|
||||
_value = !_value;
|
||||
|
||||
Index: sooperlooper/src/gui/midi_bind_panel.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/midi_bind_panel.cpp
|
||||
+++ sooperlooper/src/gui/midi_bind_panel.cpp
|
||||
@@ -880,7 +880,7 @@ void MidiBindPanel::on_button (wxCommand
|
||||
}
|
||||
else if (ev.GetId() == ID_LoadButton)
|
||||
{
|
||||
- wxString filename = _parent->do_file_selector(wxT("Choose midi binding file to open"), wxT(""), wxT("*.slb"), wxOPEN|wxCHANGE_DIR);
|
||||
+ wxString filename = _parent->do_file_selector(wxT("Choose midi binding file to open"), wxT(""), wxT("*.slb"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
_parent->get_loop_control().load_midi_bindings(filename, _append_check->GetValue());
|
||||
@@ -888,7 +888,7 @@ void MidiBindPanel::on_button (wxCommand
|
||||
}
|
||||
else if (ev.GetId() == ID_SaveButton)
|
||||
{
|
||||
- wxString filename = _parent->do_file_selector(wxT("Choose midi binding file to save"), wxT(""), wxT("*.slb"), wxSAVE|wxCHANGE_DIR|wxOVERWRITE_PROMPT);
|
||||
+ wxString filename = _parent->do_file_selector(wxT("Choose midi binding file to save"), wxT(""), wxT("*.slb"), wxFD_SAVE|wxFD_CHANGE_DIR|wxFD_OVERWRITE_PROMPT);
|
||||
|
||||
if ( !filename.empty() )
|
||||
{
|
||||
Index: sooperlooper/src/gui/config_panel.cpp
|
||||
===================================================================
|
||||
--- sooperlooper.orig/src/gui/config_panel.cpp
|
||||
+++ sooperlooper/src/gui/config_panel.cpp
|
||||
@@ -378,7 +378,7 @@ void ConfigPanel::on_button (wxCommandEv
|
||||
else if (ev.GetId() == ID_MidiBrowseButton) {
|
||||
|
||||
_parent->get_keyboard().set_enabled(false);
|
||||
- wxString filename = _parent->do_file_selector(wxT("Choose midi binding file to use"), wxT(""), wxT("*.slb"), wxOPEN|wxCHANGE_DIR);
|
||||
+ wxString filename = _parent->do_file_selector(wxT("Choose midi binding file to use"), wxT(""), wxT("*.slb"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
_parent->get_keyboard().set_enabled(true);
|
||||
|
||||
if ( !filename.empty() )
|
||||
@@ -389,8 +389,8 @@ void ConfigPanel::on_button (wxCommandEv
|
||||
else if (ev.GetId() == ID_SessionBrowseButton) {
|
||||
|
||||
_parent->get_keyboard().set_enabled(false);
|
||||
- wxString filename = _parent->do_file_selector(wxT("Choose session file to use"), wxT(""), wxT("*.slsess"), wxOPEN|wxCHANGE_DIR);
|
||||
- //wxString filename = wxFileSelector(wxT("Choose session file to use"), wxT(""), wxT(""), wxT(""), wxT("*.slsess"), wxOPEN|wxCHANGE_DIR);
|
||||
+ wxString filename = _parent->do_file_selector(wxT("Choose session file to use"), wxT(""), wxT("*.slsess"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
+ //wxString filename = wxFileSelector(wxT("Choose session file to use"), wxT(""), wxT(""), wxT(""), wxT("*.slsess"), wxFD_OPEN|wxFD_CHANGE_DIR);
|
||||
_parent->get_keyboard().set_enabled(true);
|
||||
|
||||
if ( !filename.empty() )
|
Loading…
Reference in New Issue
Block a user