mirror of
https://github.com/dguglielmi/sunny-overlay.git
synced 2025-12-06 09:32:37 +01:00
- media-sound/mixxx: re-add mixxx to fix Qt5 issues
Mixxx is compiled with Qt5 in ~gx86 and some core features are broken with Qt5, so we need to backport those following patches. - https://github.com/mixxxdj/mixxx/pull/845/commits - https://github.com/mixxxdj/mixxx/pull/848/commits
This commit is contained in:
13
media-sound/mixxx/Manifest
Normal file
13
media-sound/mixxx/Manifest
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
AUX mixxx-2.0.0-chromaprint-1.4.patch 1518 SHA256 dd2ee40a6dc2081f9c6592eb9f69001d85fb6fd7eb1860948f2b46c8e864e445 SHA512 31da87b64646188be144611fc6f601d58edfcf9e63b5382060f5088797c24d61ff4b48a4e80c5c3b919b7291287d3977c0f61829ddfe7a43f9fbae7db3b735c0 WHIRLPOOL 9dbcfa9fb14306d43b0294a5d4fc45a2c3644ba83b37868056e76b2c9e77822447ae0a5a8c94140f705f94e847da7a83b8ba5b8f23ba98989fd4423d6ca3bdd4
|
||||||
|
AUX mixxx-2.0.0-docs.patch 435 SHA256 133436b8897de326be53e82ca09ce51a8fb956cd8d8c8f3e450ab7d00b50318c SHA512 01ab76466f782f538c894e460f7694553ae12804651f68aabb6aaa0dbdc89e2ff7e2b51529b0f112cee42c8053b75fc64241a9c8898def8cf1c76231b1ec5d59 WHIRLPOOL 9155ef87f9958927bb046a4359a2e7a74210d01dc259df772c8bf97a23081f1fd9e39fa7cd108d90fca502bd366770ad1b656809e431ba45a287fd67289bf98a
|
||||||
|
AUX mixxx-2.0.0-eliminate-unnecessary-heap-allocation-of-qtime.patch 1615 SHA256 6e0bb9063974a39384af2a4c9a55c64bd5187fe341d28d0bbff3da4a126322ae SHA512 825599d1bdfbcc673c64226bde25f2ae56b046d32139c3347cb2aae698aa27158b17609dd097ce772e62bcd58b7f711d352386069683239541f3f4160dc6d915 WHIRLPOOL 697f730c9bda3d62935b335b3cf79bbd71d2e8d379a7e839f58515b914c5a403fbcaa2b10c3f0f16bdbd9634e7d3974cbe6384f5a90926e3353c88c9d27f7281
|
||||||
|
AUX mixxx-2.0.0-fix-formatting-of-time-durations.patch 866 SHA256 8b3da1f2ce481748926d0447ef41bea6c136e53cd146fd5f2a753250406edc00 SHA512 4850724ba1a6809a242976dcec5337b1f9c6c8c93c60c3ce5fa9cf6b6b714aa83485e58e7b97f849720da17e664c89adf33ed53d73d13d249a01700f638de3e2 WHIRLPOOL 43fb9d37735f7da3337c85974062dbe8d4afee544c8b650168bf236088c18b5229a8089b9f250ae5959bb4550e7a11c699c2ef7fdb93c645559a709d2d76e877
|
||||||
|
AUX mixxx-2.0.0-fix-formatting-of-time-durations2.patch 5912 SHA256 8188c3019cc7eea1f4c4bae1ea55bf807461e8f78d3c9b0a8a97dc66899886f0 SHA512 c7e7480fb6880e3543ade9455cafa9ef1cfdde0af813cb54c8dc3cd98ad964dcdf7b2c4b209dac89d7654551e54dc0bd185fb00783c0f0507f0f72f21d61a599 WHIRLPOOL 1758e747abf003aa325e45bb7bd81499126a896e2034c0cdd8192623e4fd7c1d6fccbfa7b2ccd634a5396735b52e6e6e444e98b578bd6d9b6f9b3283daaf7ef3
|
||||||
|
AUX mixxx-2.0.0-fix-missing-pointer-initialization.patch 9702 SHA256 2cd076c5c09ed5bbbececc91659ee6f70e6fcf4d61fd9be8b58f6fd9e7cc9cad SHA512 048f74fb3c0079f5935f41a4a3b5c04a691f6eaec199a8261dba119e8fa2efe15c4f8e6c24befbfadb7cf1af3db49c75ac52b3a265f52480889d4f9c9ad89eba WHIRLPOOL 4e362b72da4013b35128806515837470f788ef32daa8860318a8bb67479139bf7f1d627f79d6c14a841a527280ae0215ef8580695f2080ce30e97549a35a7cca
|
||||||
|
AUX mixxx-2.0.0-move-definition-of-time-formatseconds-into-dot-cpp-file.patch 3113 SHA256 487e3c5b180599a480f92c58c15abe3ae3ac4b53b61c759ac98202537dbf3107 SHA512 73ea80adbc32cf8c087cd97d8c8225f1d94ea138835557dac1f8b9cd8e4415ae0f6eb4548a6581aa4a8d3bada01f7c6ad3a538d3907c233a69327f4b3d31b316 WHIRLPOOL d687ba5c3f7cb43ced241f3d98206b6237fd7e37eb52529b7f18b1567308e8748fb6ba1876168f0d68012116c9297e0e5bd73a0bd6001ed863f540c480502039
|
||||||
|
AUX mixxx-2.0.0-rmx2-backport-controller-scripts.patch 10840 SHA256 515b8f1d16d13a299770400fb0dfdb09aeaf9dee6c03b94cb73742fd0464f755 SHA512 6ffced1c2368b1c5ad2cadf72fd21c917626318784cfcdbaf2d85ac63955ecdb96aefafd268a005962ced766cf8150b3daf409d587edab6a8b854ab6c7e812c5 WHIRLPOOL 03fb90054dcd30d0b7fb412d46c685cd49b1ed4ea029d7e4b8de56578899e47b1269102fbfc9940190babe1454cc1007653618fe2ceda507cdf27bfadc92955c
|
||||||
|
DIST mixxx-2.0.0-ffmpeg30.patch 714 SHA256 a5b6e8fd94ae6572efbff79529dcdb8ec2fc78a2c8fc0864d222516c8dc7b272 SHA512 60788ecab1fa92b825815fff5dfdfefe02fb097e46f7f55f318bb8a8677da42e4601cce51eaaec51988990eebb72d59346d1ec45ed76cac3c8a7f9a9d1e8cf54 WHIRLPOOL 8c780336a5f86ba8134603c1f5e3dd310006f62abe228edb2390e611f2734b0ee7c0bfe5cd91de7fab28e56809804c95fd26da6d198513fc705263e8ceca1612
|
||||||
|
DIST mixxx-2.0.0-ffmpeg31.patch 2844 SHA256 d03109463fa1191ca07bc2be6b6503c4b57272e97064f99aae812e132737f905 SHA512 7207ad72d0ea851b1425ff7472aafe5f828ca70aad0821a1ef1eb54845527532489ac7913f6584e3af5fb53bf3459abc173fbf482f83be8a22358d28b1b5cf74 WHIRLPOOL 9284dd52c4ffe04ca7977dc4ee1b6c3a6396375a48dcb9673f39a5ceb2698021f93984d57a774b36b3dfaffa15f9ca603eeae169fa146e9951da0a587fed34dd
|
||||||
|
DIST mixxx-2.0.0-src.tar.gz 25300881 SHA256 e1b8f33bba35046608578095ed3209967034579252d84c99e6bc03ec030f676d SHA512 8878c0f785e4c5f67724deeca61154d2587969a81d28aef8fa9d526aec8419a218ce2a7ef88d6fcf468d30fa13d31ac9a56ca9082431a35b7e4e040a7ccfbb1a WHIRLPOOL d3e4cf26846b54380f9b11eed26b90cf031a902ca82f20e71f85fb495f99179e8d783f2ba92b51d21fcc77d4779b7bcc16d8456a68e890cfe77daa57f0d3b431
|
||||||
|
EBUILD mixxx-2.0.0-r3.ebuild 3496 SHA256 3933384324222e304c84e3c8af6fb8f0538135bc2e4555db8d5fb2f535936694 SHA512 bc86c60e26cba080f234bdbff0a69086389d53a9291b37aa1cf11899f2a740a0c1873b77e8045e64fc0201d882e14cb480d409cb55c5ec65fa30e244622cdb7e WHIRLPOOL 9d9927ac3e1e8051c564cca7d87a5755ec106b526da00f5ae17fd39902c15746d1d52b09298e22bb827ad1be1ed3d2a0e12b9e0b8f5b045a03d6a2187bc6d6ab
|
||||||
|
MISC metadata.xml 561 SHA256 fac51b210ada59f2b25d7b091e0fedbfe8a67b22a6028a2a4da0fac9a6de00a8 SHA512 d8bddfe2914053823ef2366f67472bc19160c053bc8942b96036ee49d581ea496c0bc4788028d3bcd5b546c43483c26deb2917724b525f9040c36a14ab222f2b WHIRLPOOL 7afc7b47f36f06a632fc70b652cf5cbcf88ff69268493136a516c79256c283f720dd25d6ff874dedca12773896488be54a143673d1af6f578df44f99f8f036f8
|
||||||
40
media-sound/mixxx/files/mixxx-2.0.0-chromaprint-1.4.patch
Normal file
40
media-sound/mixxx/files/mixxx-2.0.0-chromaprint-1.4.patch
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
Backported chromaprint-1.4 API changes based on the fix suggested in:
|
||||||
|
https://github.com/mixxxdj/mixxx/pull/1073
|
||||||
|
|
||||||
|
and the work done by Charlie Gehlin in:
|
||||||
|
https://bugs.gentoo.org/604528
|
||||||
|
|
||||||
|
--- mixxx-2.0.0/src/musicbrainz/chromaprinter.cpp
|
||||||
|
+++ mixxx-2.0.0/src/musicbrainz/chromaprinter.cpp
|
||||||
|
@@ -25,6 +25,16 @@
|
||||||
|
|
||||||
|
QString ChromaPrinter::calcFingerPrint(const Mixxx::SoundSourcePointer& pSoundSource) {
|
||||||
|
|
||||||
|
+ // Type declarations of *fprint and *encoded pointers need to account for Chromaprint API version
|
||||||
|
+ // (void* -> uint32_t*) and (void* -> char*) changed in versions v1.4.0 or later -- alyptik 12/2016
|
||||||
|
+ #if (CHROMAPRINT_VERSION_MINOR > 3) || (CHROMAPRINT_VERSION_MAJOR > 1)
|
||||||
|
+ typedef uint32_t* uint32_p;
|
||||||
|
+ typedef char* char_p;
|
||||||
|
+ #else
|
||||||
|
+ typedef void* uint32_p;
|
||||||
|
+ typedef void* char_p;
|
||||||
|
+ #endif
|
||||||
|
+
|
||||||
|
// this is worth 2min of audio, multiply by 2 because we have 2 channels
|
||||||
|
// AcoustID only stores a fingerprint for the first two minutes of a song
|
||||||
|
// on their server so we need only a fingerprint of the first two minutes
|
||||||
|
@@ -57,12 +67,12 @@
|
||||||
|
}
|
||||||
|
chromaprint_finish(ctx);
|
||||||
|
|
||||||
|
- void* fprint = NULL;
|
||||||
|
+ uint32_p fprint = NULL;
|
||||||
|
int size = 0;
|
||||||
|
int ret = chromaprint_get_raw_fingerprint(ctx, &fprint, &size);
|
||||||
|
QByteArray fingerprint;
|
||||||
|
if (ret == 1) {
|
||||||
|
- void* encoded = NULL;
|
||||||
|
+ char_p encoded = NULL;
|
||||||
|
int encoded_size = 0;
|
||||||
|
chromaprint_encode_fingerprint(fprint, size,
|
||||||
|
CHROMAPRINT_ALGORITHM_DEFAULT,
|
||||||
10
media-sound/mixxx/files/mixxx-2.0.0-docs.patch
Normal file
10
media-sound/mixxx/files/mixxx-2.0.0-docs.patch
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--- mixxx-9999/src/SConscript
|
||||||
|
+++ mixxx-9999/src/SConscript
|
||||||
|
@@ -290,7 +290,6 @@
|
||||||
|
env.Alias('install', controllermappings)
|
||||||
|
env.Alias('install', translations)
|
||||||
|
env.Alias('install', keyboardmappings)
|
||||||
|
- env.Alias('install', docs)
|
||||||
|
env.Alias('install', dotdesktop)
|
||||||
|
env.Alias('install', icon)
|
||||||
|
env.Alias('install', promotracks)
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
diff -dNur a/src/analyserwaveform.cpp b/src/analyserwaveform.cpp
|
||||||
|
--- a/src/analyserwaveform.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/analyserwaveform.cpp 2017-02-04 21:12:30.127952910 +0100
|
||||||
|
@@ -1,6 +1,3 @@
|
||||||
|
-#include <QImage>
|
||||||
|
-#include <QtDebug>
|
||||||
|
-#include <QTime>
|
||||||
|
#include <QtDebug>
|
||||||
|
|
||||||
|
#include "analyserwaveform.h"
|
||||||
|
@@ -40,7 +37,6 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- m_timer = new QTime();
|
||||||
|
m_analysisDao = new AnalysisDao(m_database, pConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -48,14 +44,13 @@
|
||||||
|
qDebug() << "AnalyserWaveform::~AnalyserWaveform()";
|
||||||
|
destroyFilters();
|
||||||
|
m_database.close();
|
||||||
|
- delete m_timer;
|
||||||
|
delete m_analysisDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AnalyserWaveform::initialise(TrackPointer tio, int sampleRate, int totalSamples) {
|
||||||
|
m_skipProcessing = false;
|
||||||
|
|
||||||
|
- m_timer->start();
|
||||||
|
+ m_timer.start();
|
||||||
|
|
||||||
|
if (totalSamples == 0) {
|
||||||
|
qWarning() << "AnalyserWaveform::initialise - no waveform/waveform summary";
|
||||||
|
@@ -320,7 +315,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
qDebug() << "Waveform generation for track" << tio->getId() << "done"
|
||||||
|
- << m_timer->elapsed()/1000.0 << "s";
|
||||||
|
+ << m_timer.elapsed()/1000.0 << "s";
|
||||||
|
}
|
||||||
|
|
||||||
|
void AnalyserWaveform::storeIfGreater(float* pDest, float source) {
|
||||||
|
diff -dNur a/src/analyserwaveform.h b/src/analyserwaveform.h
|
||||||
|
--- a/src/analyserwaveform.h 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/analyserwaveform.h 2017-02-04 21:12:45.367713395 +0100
|
||||||
|
@@ -171,7 +171,7 @@
|
||||||
|
EngineFilterIIRBase* m_filter[FilterCount];
|
||||||
|
std::vector<float> m_buffers[FilterCount];
|
||||||
|
|
||||||
|
- QTime* m_timer;
|
||||||
|
+ QTime m_timer;
|
||||||
|
QSqlDatabase m_database;
|
||||||
|
AnalysisDao* m_analysisDao;
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
From 76c53b0f0a2be7b5cf85fa523f3521a5725affb2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Uwe Klotz <uwe_klotz@web.de>
|
||||||
|
Date: Fri, 8 Jan 2016 18:22:33 +0100
|
||||||
|
Subject: [PATCH] Fix formatting of time durations
|
||||||
|
|
||||||
|
---
|
||||||
|
src/util/time.h | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/time.h b/src/util/time.h
|
||||||
|
index 29187ad..7b38eb4 100644
|
||||||
|
--- a/src/util/time.h
|
||||||
|
+++ b/src/util/time.h
|
||||||
|
@@ -75,7 +75,9 @@ class Time {
|
||||||
|
const int days = static_cast<int>(dSeconds) / kSecondsPerDay;
|
||||||
|
dSeconds -= days * kSecondsPerDay;
|
||||||
|
|
||||||
|
- QTime t = QTime().addMSecs(dSeconds * kMillisPerSecond);
|
||||||
|
+ // NOTE(uklotzde): Time() constructs a 'null' object, but
|
||||||
|
+ // we need 'zero' here.
|
||||||
|
+ QTime t = QTime(0, 0).addMSecs(dSeconds * kMillisPerSecond);
|
||||||
|
|
||||||
|
QString formatString =
|
||||||
|
(days > 0 ? (QString::number(days) %
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
diff -dNur a/src/library/basesqltablemodel.cpp b/src/library/basesqltablemodel.cpp
|
||||||
|
--- a/src/library/basesqltablemodel.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/library/basesqltablemodel.cpp 2017-02-04 21:33:39.403861857 +0100
|
||||||
|
@@ -559,7 +559,7 @@
|
||||||
|
if (column == fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DURATION)) {
|
||||||
|
int duration = value.toInt();
|
||||||
|
if (duration > 0) {
|
||||||
|
- value = Time::formatSeconds(duration, false);
|
||||||
|
+ value = Time::formatSeconds(duration);
|
||||||
|
} else {
|
||||||
|
value = QString();
|
||||||
|
}
|
||||||
|
diff -dNur a/src/library/browse/browsethread.cpp b/src/library/browse/browsethread.cpp
|
||||||
|
--- a/src/library/browse/browsethread.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/library/browse/browsethread.cpp 2017-02-04 21:32:23.605066421 +0100
|
||||||
|
@@ -185,8 +185,7 @@
|
||||||
|
item->setData(item->text(), Qt::UserRole);
|
||||||
|
row_data.insert(COLUMN_COMMENT, item);
|
||||||
|
|
||||||
|
- QString duration = Time::formatSeconds(qVariantValue<int>(
|
||||||
|
- tio.getDuration()), false);
|
||||||
|
+ QString duration = Time::formatSeconds(tio.getDuration());
|
||||||
|
item = new QStandardItem(duration);
|
||||||
|
item->setToolTip(item->text());
|
||||||
|
item->setData(item->text(), Qt::UserRole);
|
||||||
|
diff -dNur a/src/library/cratefeature.cpp b/src/library/cratefeature.cpp
|
||||||
|
--- a/src/library/cratefeature.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/library/cratefeature.cpp 2017-02-04 21:30:54.962474898 +0100
|
||||||
|
@@ -493,7 +493,7 @@
|
||||||
|
crateListTableModel.index(row, durationColumn)).toInt();
|
||||||
|
m_crateList.append(qMakePair(id, QString("%1 (%2) %3")
|
||||||
|
.arg(name, QString::number(count),
|
||||||
|
- Time::formatSeconds(duration, false))));
|
||||||
|
+ Time::formatSeconds(duration))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -dNur a/src/library/playlistfeature.cpp b/src/library/playlistfeature.cpp
|
||||||
|
--- a/src/library/playlistfeature.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/library/playlistfeature.cpp 2017-02-04 21:33:06.920378091 +0100
|
||||||
|
@@ -168,7 +168,7 @@
|
||||||
|
playlistTableModel.index(row, durationColumn)).toInt();
|
||||||
|
m_playlistList.append(qMakePair(id, QString("%1 (%2) %3")
|
||||||
|
.arg(name, QString::number(count),
|
||||||
|
- Time::formatSeconds(duration, false))));
|
||||||
|
+ Time::formatSeconds(duration))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -dNur a/src/trackinfoobject.cpp b/src/trackinfoobject.cpp
|
||||||
|
--- a/src/trackinfoobject.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/trackinfoobject.cpp 2017-02-04 21:42:36.423323807 +0100
|
||||||
|
@@ -293,7 +293,7 @@
|
||||||
|
int iDuration = m_iDuration;
|
||||||
|
lock.unlock();
|
||||||
|
|
||||||
|
- return Time::formatSeconds(iDuration, false);
|
||||||
|
+ return Time::formatSeconds(iDuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackInfoObject::setLocation(const QString& location) {
|
||||||
|
diff -dNur a/src/util/time.cpp b/src/util/time.cpp
|
||||||
|
--- a/src/util/time.cpp 2017-02-04 21:29:44.439595305 +0100
|
||||||
|
+++ b/src/util/time.cpp 2017-02-04 21:37:54.739803100 +0100
|
||||||
|
@@ -1,5 +1,7 @@
|
||||||
|
#include "util/time.h"
|
||||||
|
|
||||||
|
+#include "util/assert.h"
|
||||||
|
+
|
||||||
|
// static
|
||||||
|
LLTIMER Time::s_timer;
|
||||||
|
// static
|
||||||
|
@@ -8,7 +10,7 @@
|
||||||
|
qint64 Time::s_testElapsed_nsecs = 0;
|
||||||
|
|
||||||
|
// static
|
||||||
|
-QString Time::formatSeconds(double dSeconds, bool showCentis) {
|
||||||
|
+QString Time::formatSeconds(double dSeconds, Precision precision) {
|
||||||
|
if (dSeconds < 0) {
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
@@ -24,13 +26,14 @@
|
||||||
|
(days > 0 ? (QString::number(days) %
|
||||||
|
QLatin1String("'d', ")) : QString()) %
|
||||||
|
QLatin1String(days > 0 || t.hour() > 0 ? "hh:mm:ss" : "mm:ss") %
|
||||||
|
- QLatin1String(showCentis ? ".zzz" : "");
|
||||||
|
+ QLatin1String(Precision::SECONDS == precision ? "" : ".zzz");
|
||||||
|
|
||||||
|
QString timeString = t.toString(formatString);
|
||||||
|
|
||||||
|
// The format string gives us milliseconds but we want
|
||||||
|
// centiseconds. Slice one character off.
|
||||||
|
- if (showCentis) {
|
||||||
|
+ if (Precision::CENTISECONDS == precision) {
|
||||||
|
+ DEBUG_ASSERT(1 <= timeString.length());
|
||||||
|
timeString = timeString.left(timeString.length() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -dNur a/src/util/time.h b/src/util/time.h
|
||||||
|
--- a/src/util/time.h 2017-02-04 21:29:44.439595305 +0100
|
||||||
|
+++ b/src/util/time.h 2017-02-04 21:41:01.476833822 +0100
|
||||||
|
@@ -55,10 +55,17 @@
|
||||||
|
s_testElapsed_nsecs = elapsed * 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
- // The standard way of formatting a time in seconds. Used for display of
|
||||||
|
- // track duration, etc. showCentis indicates whether to include
|
||||||
|
- // centisecond-precision or to round to the nearest second.
|
||||||
|
- static QString formatSeconds(double dSeconds, bool showCentis);
|
||||||
|
+ enum class Precision {
|
||||||
|
+ SECONDS,
|
||||||
|
+ CENTISECONDS,
|
||||||
|
+ MILLISECONDS
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ // The standard way of formatting a time in seconds. Used for display
|
||||||
|
+ // of track duration, etc.
|
||||||
|
+ static QString formatSeconds(
|
||||||
|
+ double dSeconds,
|
||||||
|
+ Precision precision = Time::Precision::SECONDS);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static LLTIMER s_timer;
|
||||||
|
diff -dNur a/src/widget/wnumberpos.cpp b/src/widget/wnumberpos.cpp
|
||||||
|
--- a/src/widget/wnumberpos.cpp 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/src/widget/wnumberpos.cpp 2017-02-04 21:41:57.023950430 +0100
|
||||||
|
@@ -92,10 +92,10 @@
|
||||||
|
QString valueString;
|
||||||
|
if (valueMillis >= 0) {
|
||||||
|
valueString = m_skinText % Time::formatSeconds(
|
||||||
|
- valueMillis / Time::kMillisPerSecond, true);
|
||||||
|
+ valueMillis / Time::kMillisPerSecond, Time::Precision::MILLISECONDS);
|
||||||
|
} else {
|
||||||
|
valueString = m_skinText % QLatin1String("-") % Time::formatSeconds(
|
||||||
|
- -valueMillis / Time::kMillisPerSecond, true);
|
||||||
|
+ -valueMillis / Time::kMillisPerSecond, Time::Precision::CENTISECONDS);
|
||||||
|
}
|
||||||
|
setText(valueString);
|
||||||
|
}
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
diff -dNur a/src/analyserwaveform.cpp b/src/analyserwaveform.cpp
|
||||||
|
--- a/src/analyserwaveform.cpp 2017-02-04 21:14:33.266016824 +0100
|
||||||
|
+++ b/src/analyserwaveform.cpp 2017-02-04 21:19:09.205671982 +0100
|
||||||
|
@@ -11,8 +11,8 @@
|
||||||
|
|
||||||
|
AnalyserWaveform::AnalyserWaveform(ConfigObject<ConfigValue>* pConfig) :
|
||||||
|
m_skipProcessing(false),
|
||||||
|
- m_waveformData(NULL),
|
||||||
|
- m_waveformSummaryData(NULL),
|
||||||
|
+ m_waveformData(nullptr),
|
||||||
|
+ m_waveformSummaryData(nullptr),
|
||||||
|
m_stride(0, 0),
|
||||||
|
m_currentStride(0),
|
||||||
|
m_currentSummaryStride(0) {
|
||||||
|
@@ -37,14 +37,13 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- m_analysisDao = new AnalysisDao(m_database, pConfig);
|
||||||
|
+ m_pAnalysisDao = std::make_unique<AnalysisDao>(m_database, pConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
AnalyserWaveform::~AnalyserWaveform() {
|
||||||
|
qDebug() << "AnalyserWaveform::~AnalyserWaveform()";
|
||||||
|
destroyFilters();
|
||||||
|
m_database.close();
|
||||||
|
- delete m_analysisDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AnalyserWaveform::initialise(TrackPointer tio, int sampleRate, int totalSamples) {
|
||||||
|
@@ -115,7 +114,7 @@
|
||||||
|
|
||||||
|
if (trackId != -1 && (missingWaveform || missingWavesummary)) {
|
||||||
|
QList<AnalysisDao::AnalysisInfo> analyses =
|
||||||
|
- m_analysisDao->getAnalysesForTrack(trackId);
|
||||||
|
+ m_pAnalysisDao->getAnalysesForTrack(trackId);
|
||||||
|
|
||||||
|
QListIterator<AnalysisDao::AnalysisInfo> it(analyses);
|
||||||
|
while (it.hasNext()) {
|
||||||
|
@@ -130,7 +129,7 @@
|
||||||
|
missingWaveform = false;
|
||||||
|
} else if (vc != WaveformFactory::VC_KEEP) {
|
||||||
|
// remove all other Analysis except that one we should keep
|
||||||
|
- m_analysisDao->deleteAnalysis(analysis.analysisId);
|
||||||
|
+ m_pAnalysisDao->deleteAnalysis(analysis.analysisId);
|
||||||
|
}
|
||||||
|
} if (analysis.type == AnalysisDao::TYPE_WAVESUMMARY) {
|
||||||
|
vc = WaveformFactory::waveformSummaryVersionToVersionClass(analysis.version);
|
||||||
|
@@ -140,7 +139,7 @@
|
||||||
|
missingWavesummary = false;
|
||||||
|
} else if (vc != WaveformFactory::VC_KEEP) {
|
||||||
|
// remove all other Analysis except that one we should keep
|
||||||
|
- m_analysisDao->deleteAnalysis(analysis.analysisId);
|
||||||
|
+ m_pAnalysisDao->deleteAnalysis(analysis.analysisId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -273,13 +272,13 @@
|
||||||
|
tio->setWaveform(ConstWaveformPointer());
|
||||||
|
// Since clear() could delete the waveform, clear our pointer to the
|
||||||
|
// waveform's vector data first.
|
||||||
|
- m_waveformData = NULL;
|
||||||
|
+ m_waveformData = nullptr;
|
||||||
|
m_waveform.clear();
|
||||||
|
|
||||||
|
tio->setWaveformSummary(ConstWaveformPointer());
|
||||||
|
// Since clear() could delete the waveform, clear our pointer to the
|
||||||
|
// waveform's vector data first.
|
||||||
|
- m_waveformSummaryData = NULL;
|
||||||
|
+ m_waveformSummaryData = nullptr;
|
||||||
|
m_waveformSummary.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -295,7 +294,7 @@
|
||||||
|
m_waveform->setDescription(WaveformFactory::currentWaveformDescription());
|
||||||
|
// Since clear() could delete the waveform, clear our pointer to the
|
||||||
|
// waveform's vector data first.
|
||||||
|
- m_waveformData = NULL;
|
||||||
|
+ m_waveformData = nullptr;
|
||||||
|
m_waveform.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -306,7 +305,7 @@
|
||||||
|
m_waveformSummary->setDescription(WaveformFactory::currentWaveformSummaryDescription());
|
||||||
|
// Since clear() could delete the waveform, clear our pointer to the
|
||||||
|
// waveform's vector data first.
|
||||||
|
- m_waveformSummaryData = NULL;
|
||||||
|
+ m_waveformSummaryData = nullptr;
|
||||||
|
m_waveformSummary.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -dNur a/src/analyserwaveform.h b/src/analyserwaveform.h
|
||||||
|
--- a/src/analyserwaveform.h 2017-02-04 21:14:33.266016824 +0100
|
||||||
|
+++ b/src/analyserwaveform.h 2017-02-04 21:20:17.308598419 +0100
|
||||||
|
@@ -4,12 +4,14 @@
|
||||||
|
#include <QTime>
|
||||||
|
#include <QImage>
|
||||||
|
#include <QSqlDatabase>
|
||||||
|
+
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
#include "configobject.h"
|
||||||
|
#include "analyser.h"
|
||||||
|
#include "waveform/waveform.h"
|
||||||
|
#include "util/math.h"
|
||||||
|
+#include "util/memory.h"
|
||||||
|
|
||||||
|
//NOTS vrince some test to segment sound, to apply color in the waveform
|
||||||
|
//#define TEST_HEAT_MAP
|
||||||
|
@@ -173,7 +175,7 @@
|
||||||
|
|
||||||
|
QTime m_timer;
|
||||||
|
QSqlDatabase m_database;
|
||||||
|
- AnalysisDao* m_analysisDao;
|
||||||
|
+ std::unique_ptr<AnalysisDao> m_pAnalysisDao;
|
||||||
|
|
||||||
|
#ifdef TEST_HEAT_MAP
|
||||||
|
QImage* test_heatMap;
|
||||||
|
diff -dNur a/src/util/memory.h b/src/util/memory.h
|
||||||
|
--- a/src/util/memory.h 1970-01-01 01:00:00.000000000 +0100
|
||||||
|
+++ b/src/util/memory.h 2017-02-04 22:19:41.846922929 +0100
|
||||||
|
@@ -0,0 +1,149 @@
|
||||||
|
+// Taken from https://github.com/bstreiff/cppbits
|
||||||
|
+// Thank you Brandon Streiff!
|
||||||
|
+
|
||||||
|
+// Implementation of C++14's make_unique for C++11 compilers.
|
||||||
|
+//
|
||||||
|
+// This has been tested with:
|
||||||
|
+// - MSVC 11.0 (Visual Studio 2012)
|
||||||
|
+// - gcc 4.6.3
|
||||||
|
+// - Xcode 4.4 (with clang "4.0")
|
||||||
|
+//
|
||||||
|
+// It is based off an implementation proposed by Stephan T. Lavavej for
|
||||||
|
+// inclusion in the C++14 standard:
|
||||||
|
+// http://isocpp.org/files/papers/N3656.txt
|
||||||
|
+// Where appropriate, it borrows the use of MSVC's _VARIADIC_EXPAND_0X macro
|
||||||
|
+// machinery to compensate for lack of variadic templates.
|
||||||
|
+//
|
||||||
|
+// This file injects make_unique into the std namespace, which I acknowledge is
|
||||||
|
+// technically forbidden ([C++11: 17.6.4.2.2.1/1]), but is necessary in order
|
||||||
|
+// to have syntax compatibility with C++14.
|
||||||
|
+//
|
||||||
|
+// I perform compiler version checking for MSVC, gcc, and clang to ensure that
|
||||||
|
+// we don't add make_unique if it is already there (instead, we include
|
||||||
|
+// <memory> to get the compiler-provided one). You can override the compiler
|
||||||
|
+// version checking by defining the symbol COMPILER_SUPPORTS_MAKE_UNIQUE.
|
||||||
|
+//
|
||||||
|
+//
|
||||||
|
+// ===============================================================================
|
||||||
|
+// This file is released into the public domain. See LICENCE for more information.
|
||||||
|
+// ===============================================================================
|
||||||
|
+
|
||||||
|
+#ifndef MIXXX_UTIL_MEMORY_H
|
||||||
|
+#define MIXXX_UTIL_MEMORY_H
|
||||||
|
+
|
||||||
|
+// If user hasn't specified COMPILER_SUPPORTS_MAKE_UNIQUE then try to figure out
|
||||||
|
+// based on compiler version if std::make_unique is provided.
|
||||||
|
+#if !defined(COMPILER_SUPPORTS_MAKE_UNIQUE)
|
||||||
|
+ // Compiling with -std=c++11 sets __cplusplus=201103L and disables
|
||||||
|
+ // std::make_unique() from C++14! We need to take this into account.
|
||||||
|
+ #define CPLUSPLUS_SUPPORTS_MAKE_UNIQUE (__cplusplus > 201103L)
|
||||||
|
+ #if defined(_MSC_VER)
|
||||||
|
+ // std::make_unique was added in MSVC 12.0
|
||||||
|
+ #if _MSC_VER >= 1800 // MSVC 12.0 (Visual Studio 2013)
|
||||||
|
+ #define COMPILER_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #endif
|
||||||
|
+ #elif defined(__clang__)
|
||||||
|
+ // std::make_unique was added in clang 3.4, but not until Xcode 6.
|
||||||
|
+ // Annoyingly, Apple makes the clang version defines match the version
|
||||||
|
+ // of Xcode, not the version of clang.
|
||||||
|
+ #define CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
|
||||||
|
+ #if defined(__APPLE__) && CLANG_VERSION >= 60000 && CPLUSPLUS_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #define COMPILER_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #elif !defined(__APPLE__) && CLANG_VERSION >= 30400 && CPLUSPLUS_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #define COMPILER_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #endif
|
||||||
|
+ #elif defined(__GNUC__)
|
||||||
|
+ // std::make_unique was added in gcc 4.9
|
||||||
|
+ #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
||||||
|
+ #if GCC_VERSION >= 40900 && CPLUSPLUS_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #define COMPILER_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+ #endif
|
||||||
|
+ #endif
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if defined(COMPILER_SUPPORTS_MAKE_UNIQUE)
|
||||||
|
+
|
||||||
|
+// If the compiler supports std::make_unique, then pull in <memory> to get it.
|
||||||
|
+#include <memory>
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+
|
||||||
|
+// Otherwise, the compiler doesn't provide it, so implement it ourselves.
|
||||||
|
+
|
||||||
|
+#include <cstddef>
|
||||||
|
+#include <memory>
|
||||||
|
+#include <type_traits>
|
||||||
|
+#include <utility>
|
||||||
|
+
|
||||||
|
+namespace std {
|
||||||
|
+
|
||||||
|
+template<class _Ty> struct _Unique_if {
|
||||||
|
+ typedef unique_ptr<_Ty> _Single_object;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+template<class _Ty> struct _Unique_if<_Ty[]> {
|
||||||
|
+ typedef unique_ptr<_Ty[]> _Unknown_bound;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+template<class _Ty, size_t N> struct _Unique_if<_Ty[N]> {
|
||||||
|
+ typedef void _Known_bound;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+//
|
||||||
|
+// template< class T, class... Args >
|
||||||
|
+// unique_ptr<T> make_unique( Args&&... args);
|
||||||
|
+//
|
||||||
|
+
|
||||||
|
+#if defined(_MSC_VER) && (_MSC_VER < 1800)
|
||||||
|
+
|
||||||
|
+// Macro machinery because MSVC 11.0 doesn't support variadic templates.
|
||||||
|
+// The _VARIADIC_EXPAND_0X stuff is defined in <xstddef>
|
||||||
|
+#define _MAKE_UNIQUE( \
|
||||||
|
+ TEMPLATE_LIST, PADDING_LIST, LIST, COMMA, X1, X2, X3, X4) \
|
||||||
|
+ template<class _Ty COMMA LIST(_CLASS_TYPE)> inline \
|
||||||
|
+ typename _Unique_if<_Ty>::_Single_object make_unique(LIST(_TYPE_REFREF_ARG)) \
|
||||||
|
+ { \
|
||||||
|
+ return unique_ptr<_Ty>(new _Ty(LIST(_FORWARD_ARG))); \
|
||||||
|
+ } \
|
||||||
|
+
|
||||||
|
+_VARIADIC_EXPAND_0X(_MAKE_UNIQUE, , , , )
|
||||||
|
+#undef _MAKE_UNIQUE
|
||||||
|
+
|
||||||
|
+#else // not MSVC 11.0 or earlier
|
||||||
|
+
|
||||||
|
+template<class _Ty, class... Args>
|
||||||
|
+ typename _Unique_if<_Ty>::_Single_object
|
||||||
|
+ make_unique(Args&&... args) {
|
||||||
|
+ return unique_ptr<_Ty>(new _Ty(std::forward<Args>(args)...));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+// template< class T >
|
||||||
|
+// unique_ptr<T> make_unique( std::size_t size );
|
||||||
|
+
|
||||||
|
+template<class _Ty>
|
||||||
|
+ typename _Unique_if<_Ty>::_Unknown_bound
|
||||||
|
+ make_unique(size_t n) {
|
||||||
|
+ typedef typename remove_extent<_Ty>::type U;
|
||||||
|
+ return unique_ptr<_Ty>(new U[n]());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+// template< class T, class... Args >
|
||||||
|
+// /* unspecified */ make_unique( Args&&... args ) = delete;
|
||||||
|
+
|
||||||
|
+// MSVC 11.0 doesn't support deleted functions, so the best we can do
|
||||||
|
+// is simply not define the function.
|
||||||
|
+#if !(defined(_MSC_VER) && (_MSC_VER < 1800))
|
||||||
|
+
|
||||||
|
+template<class T, class... Args>
|
||||||
|
+ typename _Unique_if<T>::_Known_bound
|
||||||
|
+ make_unique(Args&&...) = delete;
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+} // namespace std
|
||||||
|
+
|
||||||
|
+#endif // !COMPILER_SUPPORTS_MAKE_UNIQUE
|
||||||
|
+
|
||||||
|
+#endif /* MIXXX_UTIL_MEMORY_H */
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
From c2af9e6eeb469718b9aa069b90a719fac80dd0d9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Uwe Klotz <uwe_klotz@web.de>
|
||||||
|
Date: Fri, 8 Jan 2016 19:25:58 +0100
|
||||||
|
Subject: [PATCH] Move definition of Time::formatSeconds() into .cpp file
|
||||||
|
|
||||||
|
---
|
||||||
|
src/util/time.cpp | 30 ++++++++++++++++++++++++++++++
|
||||||
|
src/util/time.h | 29 +----------------------------
|
||||||
|
2 files changed, 31 insertions(+), 28 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/time.cpp b/src/util/time.cpp
|
||||||
|
index 998fa73..d8a122b 100644
|
||||||
|
--- a/src/util/time.cpp
|
||||||
|
+++ b/src/util/time.cpp
|
||||||
|
@@ -6,3 +6,33 @@ LLTIMER Time::s_timer;
|
||||||
|
bool Time::s_testMode = false;
|
||||||
|
// static
|
||||||
|
qint64 Time::s_testElapsed_nsecs = 0;
|
||||||
|
+
|
||||||
|
+// static
|
||||||
|
+QString Time::formatSeconds(double dSeconds, bool showCentis) {
|
||||||
|
+ if (dSeconds < 0) {
|
||||||
|
+ return "?";
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ const int days = static_cast<int>(dSeconds) / kSecondsPerDay;
|
||||||
|
+ dSeconds -= days * kSecondsPerDay;
|
||||||
|
+
|
||||||
|
+ // NOTE(uklotzde): Time() constructs a 'null' object, but
|
||||||
|
+ // we need 'zero' here.
|
||||||
|
+ QTime t = QTime(0, 0).addMSecs(dSeconds * kMillisPerSecond);
|
||||||
|
+
|
||||||
|
+ QString formatString =
|
||||||
|
+ (days > 0 ? (QString::number(days) %
|
||||||
|
+ QLatin1String("'d', ")) : QString()) %
|
||||||
|
+ QLatin1String(days > 0 || t.hour() > 0 ? "hh:mm:ss" : "mm:ss") %
|
||||||
|
+ QLatin1String(showCentis ? ".zzz" : "");
|
||||||
|
+
|
||||||
|
+ QString timeString = t.toString(formatString);
|
||||||
|
+
|
||||||
|
+ // The format string gives us milliseconds but we want
|
||||||
|
+ // centiseconds. Slice one character off.
|
||||||
|
+ if (showCentis) {
|
||||||
|
+ timeString = timeString.left(timeString.length() - 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return timeString;
|
||||||
|
+}
|
||||||
|
diff --git a/src/util/time.h b/src/util/time.h
|
||||||
|
index 7b38eb4..b4e2c2d 100644
|
||||||
|
--- a/src/util/time.h
|
||||||
|
+++ b/src/util/time.h
|
||||||
|
@@ -67,34 +67,7 @@ class Time {
|
||||||
|
// The standard way of formatting a time in seconds. Used for display of
|
||||||
|
// track duration, etc. showCentis indicates whether to include
|
||||||
|
// centisecond-precision or to round to the nearest second.
|
||||||
|
- static QString formatSeconds(double dSeconds, bool showCentis) {
|
||||||
|
- if (dSeconds < 0) {
|
||||||
|
- return "?";
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- const int days = static_cast<int>(dSeconds) / kSecondsPerDay;
|
||||||
|
- dSeconds -= days * kSecondsPerDay;
|
||||||
|
-
|
||||||
|
- // NOTE(uklotzde): Time() constructs a 'null' object, but
|
||||||
|
- // we need 'zero' here.
|
||||||
|
- QTime t = QTime(0, 0).addMSecs(dSeconds * kMillisPerSecond);
|
||||||
|
-
|
||||||
|
- QString formatString =
|
||||||
|
- (days > 0 ? (QString::number(days) %
|
||||||
|
- QLatin1String("'d', ")) : QString()) %
|
||||||
|
- QLatin1String(days > 0 || t.hour() > 0 ? "hh:mm:ss" : "mm:ss") %
|
||||||
|
- QLatin1String(showCentis ? ".zzz" : "");
|
||||||
|
-
|
||||||
|
- QString timeString = t.toString(formatString);
|
||||||
|
-
|
||||||
|
- // The format string gives us milliseconds but we want
|
||||||
|
- // centiseconds. Slice one character off.
|
||||||
|
- if (showCentis) {
|
||||||
|
- timeString = timeString.left(timeString.length() - 1);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return timeString;
|
||||||
|
- }
|
||||||
|
+ static QString formatSeconds(double dSeconds, bool showCentis);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static LLTIMER s_timer;
|
||||||
@@ -0,0 +1,280 @@
|
|||||||
|
diff -dNur a/res/controllers/Hercules-DJ-Console-RMX-2-scripts.js b/res/controllers/Hercules-DJ-Console-RMX-2-scripts.js
|
||||||
|
--- a/res/controllers/Hercules-DJ-Console-RMX-2-scripts.js 2015-12-29 17:10:41.000000000 +0100
|
||||||
|
+++ b/res/controllers/Hercules-DJ-Console-RMX-2-scripts.js 2017-02-04 22:01:01.629506434 +0100
|
||||||
|
@@ -1,128 +1,159 @@
|
||||||
|
-/*╔══:::Made Lovingly By Circuitfry:::═════════════════════════════════╗
|
||||||
|
- ║ Hercules DJConsole RMX 2 Mapping Scripts v. 0.1.3 ║
|
||||||
|
- ╚════════════════════════════════════════════════════════════════════╝
|
||||||
|
- * Version 0.1.0: Basic Midi Wizard Mapping
|
||||||
|
- * Version 0.1.1: Partially-Functional platters (version 1).
|
||||||
|
- * Version 0.1.2: Functional platters (version 1)
|
||||||
|
- * Version 0.1.3: Functional EQ Kill/Pitch Bending buttons
|
||||||
|
- Functional Looping/Sample/Effect pads
|
||||||
|
- Bugfix: Source 2 Gain knob doesn't load tracks.
|
||||||
|
- Overhaul: MIDI Scripting file.
|
||||||
|
- Worklog: Need to implement Microphone/Source1/Source2 input.
|
||||||
|
- * Note 1: [DEP] Means the command is meant for Mixxx v1.10.x + below.
|
||||||
|
- * Note 2: [FUT] Means the command is meant for Mixxx v1.11.x + above.
|
||||||
|
-*/
|
||||||
|
-function DJCRMX2(){}
|
||||||
|
-DJCRMX2.scratching = [];
|
||||||
|
+/* ╔══:::Made Lovingly By Circuitfry:::═════════════════════════════════╗
|
||||||
|
+ * ║ Hercules DJConsole RMX 2 Mapping Scripts ║
|
||||||
|
+ * ╚════════════════════════════════════════════════════════════════════╝
|
||||||
|
+ */
|
||||||
|
|
||||||
|
-/* [ Function init ] - Version 0.1.3
|
||||||
|
- * Initiates some global variables and assigns an ID. Required.
|
||||||
|
-*/
|
||||||
|
-DJCRMX2.init = function(id){
|
||||||
|
- DJCRMX2.id = id;
|
||||||
|
- DJCRMX2.scratching[1]=false;
|
||||||
|
- DJCRMX2.scratching[2]=false;
|
||||||
|
- engine.setValue("[Microphone]","enabled",0);
|
||||||
|
- engine.setValue("[Microphone]","talkover",0);
|
||||||
|
+function DJCRMX2() {}
|
||||||
|
+DJCRMX2.decks = [];
|
||||||
|
+
|
||||||
|
+/* [ Function init ]
|
||||||
|
+ * Initiates some global variables and assigns an ID. Required.
|
||||||
|
+ */
|
||||||
|
+DJCRMX2.init = function (id) {
|
||||||
|
+ DJCRMX2.id = id;
|
||||||
|
+ DJCRMX2.decks[1] = new DJCRMX2.Deck(1);
|
||||||
|
+ DJCRMX2.decks[2] = new DJCRMX2.Deck(2);
|
||||||
|
+ engine.setValue("[Microphone]", "enabled", 0);
|
||||||
|
+ engine.setValue("[Microphone]", "talkover", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* [ Function wheelPress ] - Version 0.1.2
|
||||||
|
- * Detects whether a jog wheel is pressed or not and sets a specific
|
||||||
|
- * variable on and off accordingly.
|
||||||
|
-*/
|
||||||
|
-DJCRMX2.wheelPress = function (channel, control, value, status, group){
|
||||||
|
- if (status == 0x90) // If status #144 is active (2 possibilities)
|
||||||
|
- {
|
||||||
|
- if (value == 0x7F) // And the jog wheel is pressed down:
|
||||||
|
- { /* engine.scratchEnable(int,int,float,float,float,bool);
|
||||||
|
- * [ int deck ] Which track/platter is playing?
|
||||||
|
- * [ int intervalsPerRev ] # of MIDI signals sent in 1 spin.
|
||||||
|
- * [ float rpm ] Imaginary vinyl rotation speed.
|
||||||
|
- * [ float alpha ] Just a fine-tuning variable.
|
||||||
|
- * [ float beta ] Just a fine-tuning variable.
|
||||||
|
- * [ bool ramp ] As far as I know, nothing...
|
||||||
|
- */
|
||||||
|
- var alpha = 1.0/8;
|
||||||
|
- var beta = alpha/32;
|
||||||
|
- if(group=="[Channel1]")
|
||||||
|
- {
|
||||||
|
- engine.scratchEnable(1, 250, 50, alpha, beta);
|
||||||
|
- DJCRMX2.scratching[1] = true; //[DEP]
|
||||||
|
- }
|
||||||
|
- if(group=="[Channel2]")
|
||||||
|
- {
|
||||||
|
- engine.scratchEnable(2, 250, 50, alpha, beta);
|
||||||
|
- DJCRMX2.scratching[2] = true; //[DEP]
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- }
|
||||||
|
- if (value == 0x00 ) // If the jog wheel is released:
|
||||||
|
- {
|
||||||
|
- if(group=="[Channel1]")
|
||||||
|
- {
|
||||||
|
- DJCRMX2.scratching[1] = false; // <- v1.10.x and below
|
||||||
|
- engine.scratchDisable(1);
|
||||||
|
- }
|
||||||
|
- if(group=="[Channel2]")
|
||||||
|
- {
|
||||||
|
- DJCRMX2.scratching[2] = false; // <- v1.10.x and below
|
||||||
|
- engine.scratchDisable(2);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- else //Default setting where button is not held down.
|
||||||
|
- {
|
||||||
|
- DJCRMX2.scratching[1] = false; // Only for v1.10.x and below
|
||||||
|
- DJCRMX2.scratching[2] = false; // Only for v1.10.x and below
|
||||||
|
- engine.scratchDisable(1);
|
||||||
|
- engine.scratchDisable(2);
|
||||||
|
- }
|
||||||
|
- return;
|
||||||
|
+////////////////////////////////////////////////////////////////////////
|
||||||
|
+// Decks //
|
||||||
|
+////////////////////////////////////////////////////////////////////////
|
||||||
|
+
|
||||||
|
+DJCRMX2.Deck = function(number) {
|
||||||
|
+ this.number = number;
|
||||||
|
+ this.group = "[Channel" + this.number + "]";
|
||||||
|
+ this.scratchTimer = 0;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+DJCRMX2.Deck.prototype.wheelPress = function (value) {
|
||||||
|
+ if (this.scratchTimer != 0) {
|
||||||
|
+ // The wheel was touched again, reset the timer.
|
||||||
|
+ engine.stopTimer(this.scratchTimer);
|
||||||
|
+ this.scratchTimer = 0;
|
||||||
|
+ }
|
||||||
|
+ if (value == 0x7F) {
|
||||||
|
+ // And the jog wheel is pressed down:
|
||||||
|
+
|
||||||
|
+ /* engine.scratchEnable(int,int,float,float,float,bool);
|
||||||
|
+ * [ int deck ] Which track/platter is playing?
|
||||||
|
+ * [ int intervalsPerRev ] # of MIDI signals sent in 1 spin.
|
||||||
|
+ * [ float rpm ] Imaginary vinyl rotation speed.
|
||||||
|
+ * [ float alpha ] Just a fine-tuning variable.
|
||||||
|
+ * [ float beta ] Just a fine-tuning variable.
|
||||||
|
+ * [ bool ramp ] As far as I know, nothing...
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ var alpha = 1.0 / 8;
|
||||||
|
+ var beta = alpha / 32;
|
||||||
|
+ engine.scratchEnable(this.number, 256, 33 + 1/3, alpha, beta);
|
||||||
|
+ } else {
|
||||||
|
+ // The wheel touch sensor can be overly sensitive, so don't release scratch mode right away.
|
||||||
|
+ // Depending on how fast the platter was moving, lengthen the time we'll wait.
|
||||||
|
+ var scratchRate = Math.abs(engine.getValue(this.group, "scratch2"));
|
||||||
|
+ var inertiaTime = Math.pow(1.8, scratchRate) * 50;
|
||||||
|
+ if (inertiaTime < 100) {
|
||||||
|
+ // Just do it now.
|
||||||
|
+ this.finishWheelPress();
|
||||||
|
+ } else {
|
||||||
|
+ this.scratchTimer = engine.beginTimer(
|
||||||
|
+ 100, "DJCRMX2.decks[" + this.number + "].finishWheelPress()", true);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+DJCRMX2.Deck.prototype.finishWheelPress = function() {
|
||||||
|
+ this.scratchTimer = 0;
|
||||||
|
+ var play = engine.getValue(this.group, "play");
|
||||||
|
+ if (play != 0) {
|
||||||
|
+ // If we are playing, just hand off to the engine.
|
||||||
|
+ engine.scratchDisable(this.number, true);
|
||||||
|
+ } else {
|
||||||
|
+ // If things are paused, there will be a non-smooth handoff between scratching and jogging.
|
||||||
|
+ // Instead, keep scratch on until the platter is not moving.
|
||||||
|
+ var scratchRate = Math.abs(engine.getValue(this.group, "scratch2"));
|
||||||
|
+ if (scratchRate < 0.01) {
|
||||||
|
+ // The platter is basically stopped, now we can disable scratch and hand off to jogging.
|
||||||
|
+ engine.scratchDisable(this.number, false);
|
||||||
|
+ } else {
|
||||||
|
+ // Check again soon.
|
||||||
|
+ this.scratchTimer = engine.beginTimer(
|
||||||
|
+ 100, "DJCRMX2.decks[" + this.number + "].finishWheelPress()", true);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/* [ Function wheelTurn ]
|
||||||
|
+ * Pays attention to the current deck, checks scratching, affects the
|
||||||
|
+ * song accordingly.
|
||||||
|
+ */
|
||||||
|
+DJCRMX2.Deck.prototype.wheelTurn = function (value) {
|
||||||
|
+ var newValue = 0;
|
||||||
|
+ // Spinning backwards = 127 or less (less meaning faster)
|
||||||
|
+ // Spinning forwards = 1 or more (more meaning faster)
|
||||||
|
+ if (value - 64 > 0) {
|
||||||
|
+ newValue = value - 128;
|
||||||
|
+ } else {
|
||||||
|
+ newValue = value;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (engine.isScratching(this.number)) {
|
||||||
|
+ engine.scratchTick(this.number, newValue);
|
||||||
|
+ } else {
|
||||||
|
+ engine.setValue(this.group, "jog", newValue);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+/* [ Function wheelPress ]
|
||||||
|
+ * Detects whether a jog wheel is pressed or not and sets a specific
|
||||||
|
+ * variable on and off accordingly.
|
||||||
|
+ */
|
||||||
|
+DJCRMX2.wheelPress = function (channel, control, value, status, group) {
|
||||||
|
+ var deck = 0;
|
||||||
|
+ if (group == "[Channel1]") {
|
||||||
|
+ deck = 1;
|
||||||
|
+ } else if (group == "[Channel2]") {
|
||||||
|
+ deck = 2;
|
||||||
|
+ } else {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ DJCRMX2.decks[deck].wheelPress(value);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
-/* [ Function wheelTurn ] - Version 0.1.2
|
||||||
|
- * Pays attention to the current deck, checks scratching, affects the
|
||||||
|
- * song accordingly.
|
||||||
|
-*/
|
||||||
|
-DJCRMX2.wheelTurn = function (channel, control, value, status, group){
|
||||||
|
- var newValue=0;
|
||||||
|
- // Spinning backwards = 127 or less (less meaning faster)
|
||||||
|
- // Spinning forwards = 1 or more (more meaning faster)
|
||||||
|
- if (value-64 > 0) newValue = (value-128);
|
||||||
|
- else newValue=value;
|
||||||
|
- //if (!engine.isScratching(DJCRMX2.currentDeck)) // [FUT]
|
||||||
|
- if(group=="[Channel1]")
|
||||||
|
- {
|
||||||
|
- if(DJCRMX2.scratching[1]==true) {engine.scratchTick(1,newValue);return;}
|
||||||
|
- }
|
||||||
|
- else if(group=="[Channel2]")
|
||||||
|
- {
|
||||||
|
- if(DJCRMX2.scratching[2]==true) {engine.scratchTick(2,newValue);return;}
|
||||||
|
- }
|
||||||
|
- engine.setValue(group, "jog", newValue);
|
||||||
|
- return;
|
||||||
|
+/* [ Function wheelTurn ]
|
||||||
|
+ * Pays attention to the current deck, checks scratching, affects the
|
||||||
|
+ * song accordingly.
|
||||||
|
+ */
|
||||||
|
+DJCRMX2.wheelTurn = function (channel, control, value, status, group) {
|
||||||
|
+ var deck = 0;
|
||||||
|
+ if (group == "[Channel1]") {
|
||||||
|
+ deck = 1;
|
||||||
|
+ } else if (group == "[Channel2]") {
|
||||||
|
+ deck = 2;
|
||||||
|
+ } else {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ DJCRMX2.decks[deck].wheelTurn(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
-DJCRMX2.micSwitch = function (channel, control, value, status) //???
|
||||||
|
+DJCRMX2.micSwitch = function (channel, control, value, status)
|
||||||
|
{
|
||||||
|
- if(status == 0x90 && control == 0x48 && value == 0x7F)
|
||||||
|
- {
|
||||||
|
- engine.setValue("[Microphone]","enabled",1);
|
||||||
|
- engine.setValue("[Microphone]","talkover",1);
|
||||||
|
- }
|
||||||
|
- if(status == 0x90 && control == 0x48 && value == 0x00)
|
||||||
|
- {
|
||||||
|
- engine.setValue("[Microphone]","enabled",0);
|
||||||
|
- engine.setValue("[Microphone]","talkover",0);
|
||||||
|
- }
|
||||||
|
+ if (status == 0x90 && control == 0x48 && value == 0x7F) {
|
||||||
|
+ engine.setValue("[Microphone]","enabled",1);
|
||||||
|
+ engine.setValue("[Microphone]","talkover",1);
|
||||||
|
+ } else if (status == 0x90 && control == 0x48 && value == 0x00) {
|
||||||
|
+ engine.setValue("[Microphone]","enabled",0);
|
||||||
|
+ engine.setValue("[Microphone]","talkover",0);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
-/* [ Function shutdown ] - Version 0.1.3
|
||||||
|
- * Sets variables down for shutoff.
|
||||||
|
-*/
|
||||||
|
-DJCRMX2.shutdown = function(id){
|
||||||
|
- DJCRMX2.scratching[1]=false;
|
||||||
|
- DJCRMX2.scratching[2]=false;
|
||||||
|
- engine.setValue("[Microphone]","enabled",0);
|
||||||
|
- engine.setValue("[Microphone]","talkover",0);
|
||||||
|
+/* [ Function shutdown ] - Version 0.1.3
|
||||||
|
+ * Sets variables down for shutoff.
|
||||||
|
+ */
|
||||||
|
+DJCRMX2.shutdown = function (id) {
|
||||||
|
+ engine.setValue("[Microphone]", "enabled", 0);
|
||||||
|
+ engine.setValue("[Microphone]", "talkover", 0);
|
||||||
|
}
|
||||||
16
media-sound/mixxx/metadata.xml
Normal file
16
media-sound/mixxx/metadata.xml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
|
||||||
|
<pkgmetadata>
|
||||||
|
<maintainer type="project">
|
||||||
|
<email>proaudio@gentoo.org</email>
|
||||||
|
<name>Gentoo ProAudio Project</name>
|
||||||
|
</maintainer>
|
||||||
|
<use>
|
||||||
|
<flag name="hid">Enable HID controller support</flag>
|
||||||
|
<flag name="shout">Enable broadcasting support via <pkg>media-libs/libshout</pkg></flag>
|
||||||
|
<flag name="vamp">Enable vamp analyzing plugins support</flag>
|
||||||
|
</use>
|
||||||
|
<upstream>
|
||||||
|
<remote-id type="sourceforge">mixxx</remote-id>
|
||||||
|
</upstream>
|
||||||
|
</pkgmetadata>
|
||||||
134
media-sound/mixxx/mixxx-2.0.0-r3.ebuild
Normal file
134
media-sound/mixxx/mixxx-2.0.0-r3.ebuild
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
# Copyright 1999-2017 Gentoo Foundation
|
||||||
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
EAPI=6
|
||||||
|
|
||||||
|
inherit flag-o-matic scons-utils toolchain-funcs
|
||||||
|
|
||||||
|
DESCRIPTION="Advanced Digital DJ tool based on Qt"
|
||||||
|
HOMEPAGE="http://www.mixxx.org/"
|
||||||
|
SRC_URI="http://downloads.${PN}.org/${P}/${P}-src.tar.gz"
|
||||||
|
|
||||||
|
# Upstream patches
|
||||||
|
SRC_URI+=" https://github.com/mixxxdj/mixxx/commit/51d95ba58d99309f439cb7e2d1285cfb33aa0f63.patch -> ${PN}-2.0.0-ffmpeg30.patch"
|
||||||
|
SRC_URI+=" https://github.com/mixxxdj/mixxx/commit/869e07067b15e09bf7ef886a8772afdfb79cbc3c.patch -> ${PN}-2.0.0-ffmpeg31.patch"
|
||||||
|
|
||||||
|
LICENSE="GPL-2"
|
||||||
|
SLOT="0"
|
||||||
|
KEYWORDS="~amd64 ~x86"
|
||||||
|
IUSE="aac debug doc ffmpeg hid mp3 mp4 shout wavpack"
|
||||||
|
|
||||||
|
# fails to compile system-fidlib. Add ">media-libs/fidlib-0.9.10-r1" once this
|
||||||
|
# got fixed
|
||||||
|
RDEPEND="dev-db/sqlite
|
||||||
|
dev-libs/protobuf:0=
|
||||||
|
dev-qt/qtconcurrent:5
|
||||||
|
dev-qt/qtcore:5
|
||||||
|
dev-qt/qtgui:5
|
||||||
|
dev-qt/qtnetwork:5
|
||||||
|
dev-qt/qtopengl:5
|
||||||
|
dev-qt/qtscript:5[scripttools]
|
||||||
|
dev-qt/qtsql:5
|
||||||
|
dev-qt/qtsvg:5
|
||||||
|
dev-qt/qtwidgets:5
|
||||||
|
dev-qt/qtxml:5
|
||||||
|
media-libs/chromaprint
|
||||||
|
media-libs/flac
|
||||||
|
media-libs/libid3tag
|
||||||
|
media-libs/libogg
|
||||||
|
media-libs/libsndfile
|
||||||
|
>=media-libs/libsoundtouch-1.5
|
||||||
|
media-libs/libvorbis
|
||||||
|
>=media-libs/portaudio-19_pre
|
||||||
|
media-libs/portmidi
|
||||||
|
media-libs/rubberband
|
||||||
|
media-libs/taglib
|
||||||
|
media-libs/vamp-plugin-sdk
|
||||||
|
sci-libs/fftw:3.0=
|
||||||
|
virtual/libusb:1
|
||||||
|
virtual/opengl
|
||||||
|
x11-libs/libX11
|
||||||
|
aac? (
|
||||||
|
media-libs/faad2
|
||||||
|
media-libs/libmp4v2:0
|
||||||
|
)
|
||||||
|
hid? ( dev-libs/hidapi )
|
||||||
|
mp3? ( media-libs/libmad )
|
||||||
|
mp4? ( media-libs/libmp4v2:= )
|
||||||
|
shout? ( media-libs/libshout )
|
||||||
|
wavpack? ( media-sound/wavpack )
|
||||||
|
ffmpeg? ( media-video/ffmpeg:0= )"
|
||||||
|
# media-libs/rubberband RDEPENDs on sci-libs/fftw:3.0
|
||||||
|
DEPEND="${RDEPEND}
|
||||||
|
virtual/pkgconfig
|
||||||
|
dev-qt/qttest:5
|
||||||
|
dev-qt/qtxmlpatterns:5
|
||||||
|
"
|
||||||
|
|
||||||
|
PATCHES=(
|
||||||
|
"${FILESDIR}"/${PN}-2.0.0-docs.patch
|
||||||
|
"${DISTDIR}"/${P}-ffmpeg30.patch
|
||||||
|
"${DISTDIR}"/${P}-ffmpeg31.patch
|
||||||
|
"${FILESDIR}"/${P}-chromaprint-1.4.patch #604528
|
||||||
|
|
||||||
|
"${FILESDIR}"/${P}-fix-formatting-of-time-durations.patch
|
||||||
|
"${FILESDIR}"/${P}-eliminate-unnecessary-heap-allocation-of-qtime.patch
|
||||||
|
"${FILESDIR}"/${P}-fix-missing-pointer-initialization.patch
|
||||||
|
"${FILESDIR}"/${P}-move-definition-of-time-formatseconds-into-dot-cpp-file.patch
|
||||||
|
"${FILESDIR}"/${P}-fix-formatting-of-time-durations2.patch
|
||||||
|
"${FILESDIR}"/${P}-rmx2-backport-controller-scripts.patch
|
||||||
|
)
|
||||||
|
|
||||||
|
src_prepare() {
|
||||||
|
# use multilib compatible directory for plugins
|
||||||
|
sed -i -e "/unix_lib_path =/s/'lib'/'$(get_libdir)'/" src/SConscript || die
|
||||||
|
|
||||||
|
default
|
||||||
|
}
|
||||||
|
|
||||||
|
src_configure() {
|
||||||
|
local myoptimize=0
|
||||||
|
|
||||||
|
# Required for >=qt-5.7.0 (bug #590690)
|
||||||
|
append-cxxflags -std=c++11
|
||||||
|
|
||||||
|
# Try to get cpu type based on CFLAGS.
|
||||||
|
# Bug #591968
|
||||||
|
for i in $(get-flag mcpu) $(get-flag march) ; do
|
||||||
|
if [[ ${i} = native ]] ; then
|
||||||
|
myoptimize="native"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
myesconsargs=(
|
||||||
|
prefix="${EPREFIX}/usr"
|
||||||
|
qtdir="${EPREFIX}/usr/$(get_libdir)/qt5"
|
||||||
|
faad="$(usex aac 1 0)"
|
||||||
|
ffmpeg="$(usex ffmpeg 1 0)"
|
||||||
|
hid="$(usex hid 1 0)"
|
||||||
|
hifieq=1
|
||||||
|
m4a="$(usex mp4 1 0)"
|
||||||
|
mad="$(usex mp3 1 0)"
|
||||||
|
optimize="${myoptimize}"
|
||||||
|
qdebug="$(usex debug 1 0)"
|
||||||
|
qt5=1
|
||||||
|
shoutcast="$(usex shout 1 0)"
|
||||||
|
vinylcontrol=1
|
||||||
|
wv="$(usex wavpack 1 0)"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
src_compile() {
|
||||||
|
CC="$(tc-getCC)" CXX="$(tc-getCXX)" LINKFLAGS="${LDFLAGS}" \
|
||||||
|
LIBDIR="${EPREFIX}/usr/$(get_libdir)" escons ${myesconsargs[@]}
|
||||||
|
}
|
||||||
|
|
||||||
|
src_install() {
|
||||||
|
CC="$(tc-getCC)" CXX="$(tc-getCXX)" LINKFLAGS="${LDFLAGS}" \
|
||||||
|
LIBDIR="${EPREFIX}/usr/$(get_libdir)" escons ${myesconsargs[@]} \
|
||||||
|
install_root="${ED}"/usr install
|
||||||
|
|
||||||
|
dodoc README Mixxx-Manual.pdf
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user